本文主要是介绍1 31和-(131)都是32为x86系统中的最小值!!!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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 变成最小的负数。
这篇关于1 31和-(131)都是32为x86系统中的最小值!!!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!