我知道〜0将评估最大字大小的位1(并且因此关心可移植性),但是我仍然不知道为什么((1
分享.
)-1)是不鼓励的?>
看看这些行:
1. printf("%X",~(~0 << 31) );
2. printf("%X",(1 << 31) - 1 );
第1行编译并按预期行事.
第2行给出表达式中的警告整数溢出.
这是因为1< 31被默认处理为有符号的int,因此1< 31 = -2147483648,它是最小可能的整数. 结果,休息1导致溢出.
相关文章
- java - 为什么if(n&-n)== n那么n是2的幂?
- 创建一个设置了N个最低有效位的掩码
- 渐近复杂度 - 如果f(n)= O(g(n)),则不应该f(n)* log2(f(n)^ c)= O(g(n)* log2(g(n) ))取决于C的值?
- 什么是位掩码和掩码?
- 计算机科学 - 为什么是{a ^ nb ^ n | n> = 0}不正常
- java - 为什么n n有效,而n n不是?
- 算法 - 大哦:O(n)O(n)... O(n)如何等于O(n ^ 2)?
- ruby - 为什么array.slice对于(length,n)的行为不同
点击查看更多相关文章
转载注明原文:关于C中的位掩码为什么(〜(〜0 << N))优于((1 << N)-1)? - 代码日志
解决方法
看看这些行:
1. printf("%X",(1 << 31) - 1 );
第1行编译并按预期行事.
第2行给出表达式中的警告整数溢出.
这是因为1< 31被默认处理为有符号的int,休息1导致溢出.