今天,初学者一学习编程就问了这个问题。 很多人第一次学习编程就一定会遇到这个问题。 大多数人都知道溢出等,可以通过源代码和修补程序轻松解释
int i=-2147483648; 这是不可接受的VS中报告的错误,error C4146 :一元负运算符应用于无符号类型,结果保持无符号类型的错误
那么,如果必须共享符号位和数据位,例如int存储器-2147483648,则int的第一位二进制文件被认为符号位0是整数,1是负数
-2147483647原代码1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-2147483647-1=-2147483648;
因为cpu存储了补数计算
-2147483647补数10000000000000001
-1补数11111111111111111111111111111111111111111
-2147483648得到补数1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-2147483648-1得到2147483647;
-2147483648补数10000000000000
-1补数11111111111111111111111111111111111111111
得到补数0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
正好是2147483647的最大值
2147483647 1得-2147483648;
2147483647补数01111111111111111111111111111111111111111
1补码00000000000000001
得到补数100000000000000
正好是-2147483648最小值