您的位置:首页 > 其它

1 << 31和-(1<<31)都是32为x86系统中的最小值!!!

2017-08-10 20:20 218 查看
32位x86系统中,分别执行如下两条语句
(1) int num = 1 << 31;
(2) int num = -( 1<<31 );
结果一样,均为-2147483648 。

也就是说1<<31==-(1<<31)=最小负数

原因在于:

1. 0x80 00 00 00 == 1 << 31,即-2147483648(最小负数)
2, 原码与补码之和为0,也就是a + ~a + 1 = 0. 所以 -a = 1+ ~a, -(0x80000000) = 1 + 0x7fffffff(最大正数) = 0x80000000

3.1 << 31 = > -2147483648,最小负数. -(-2147483648) = 2147483647 + 1 => 最大正数 + 1 = 最小负数 = -2147483648
其实问题等价于 为什么最大的正数 + 1 变成最小的负数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐