关于C中的位掩码为什么(〜(〜0 << N))优于((1 << N)-1)?

前端之家收集整理的这篇文章主要介绍了关于C中的位掩码为什么(〜(〜0 << N))优于((1 << N)-1)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道〜0将评估最大字大小的位1(并且因此关心可移植性),但是我仍然不知道为什么((1 分享.<="" iv="">
看看这些行:
1. printf("%X",~(~0 << 31) );
2. printf("%X",(1 << 31) - 1 );

第1行编译并按预期行事.

第2行给出表达式中的警告整数溢出.

这是因为1< 31被默认处理为有符号的int,因此1< 31 = -2147483648,它是最小可能的整数. 结果,休息1导致溢出.

转载注明原文:关于C中的位掩码为什么(〜(〜0 << N))优于((1 << N)-1)? - 代码日志

解决方法

看看这些行:
1. printf("%X",(1 << 31) - 1 );

第1行编译并按预期行事.

第2行给出表达式中的警告整数溢出.

这是因为1< 31被默认处理为有符号的int,休息1导致溢出.

猜你在找的C&C++相关文章