当前位置: 技术问答>linux和unix
大家看过这样写代码的吗?(size_t)-1
来源: 互联网 发布时间:2015-11-05
本文导语: double v = ((double)size) * (int)(nmemb & (((size_t)-1) >> 1)); 看过这样的用法的吗? | 有。(size_t)-1相当于位全为1的int。如果是16位机,相当于0xFFFF;32位机,相当于0xFFFFFFFF; | 对于非符号数...
double v = ((double)size) * (int)(nmemb & (((size_t)-1) >> 1));
看过这样的用法的吗?
看过这样的用法的吗?
|
有。(size_t)-1相当于位全为1的int。如果是16位机,相当于0xFFFF;32位机,相当于0xFFFFFFFF;
|
对于非符号数,用-1表示最大数是平常的
|
可是~0是一个int,右移一位值不变,(size_t)-1是无符号的,右移一位值变了。可以用(size_t)~0,可是它和(size_t)-1相比看不出什么优势
|
wohow()说的对。这样应用最终是为了得到unsigned int。
|
这样写法没什么不好啊。如果写0xFFFFFFFF又不直观又容易错
|
而且编译器一般会用2147483647去替换(size_t)-1>>1,即在编译时就简化表达式