大家看过这样写代码的吗?(size_t)-1

doubleword 2006-01-04 03:14:58
double v = ((double)size) * (int)(nmemb & (((size_t)-1) >> 1));
看过这样的用法的吗?

...全文
218 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fierygnu 2006-01-04
  • 打赏
  • 举报
回复
wohow()说的对。这样应用最终是为了得到unsigned int。
wohow 2006-01-04
  • 打赏
  • 举报
回复
可是~0是一个int,右移一位值不变,(size_t)-1是无符号的,右移一位值变了。可以用(size_t)~0,可是它和(size_t)-1相比看不出什么优势
doubleword 2006-01-04
  • 打赏
  • 举报
回复
刚才试了一下,~0编译器同样作优化.
看来这还是个人的写作习惯问题。
ouyh12345 2006-01-04
  • 打赏
  • 举报
回复
对于非符号数,用-1表示最大数是平常的
doubleword 2006-01-04
  • 打赏
  • 举报
回复
那我直接用~0不就可以了,何必这么费劲呢,不过不知道~0会不会直接通过编译器算出来。
wohow 2006-01-04
  • 打赏
  • 举报
回复
而且编译器一般会用2147483647去替换(size_t)-1>>1,即在编译时就简化表达式
wohow 2006-01-04
  • 打赏
  • 举报
回复
这样写法没什么不好啊。如果写0xFFFFFFFF又不直观又容易错
fierygnu 2006-01-04
  • 打赏
  • 举报
回复
有。(size_t)-1相当于位全为1的int。如果是16位机,相当于0xFFFF;32位机,相当于0xFFFFFFFF;

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧