我知道java的int范围是-2147483648到2147483647,但不知道为什么
今天试着讨论了一下:
首先,我想起了计算机源代码的反码完成
正数原码反码补码相等;
另一方面,逆符号与原符号的比特相同,剩下的各位取反,候补符号等于逆符号加1
计算机中32位int类型变量的范围。 其中int类型是有符号整数。
正数在计算机中为原代码,最高位为符号位:
正整数1的源代码为0000000000000000000001
正整数的最大源代码是011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
所以最大的正整数是2147483647
负数在计算机中表示为补数,最高有效位为符号位。
-1:
源代码为10000000000000000000000000001,
反码为1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
补数为11111111111111111111111111111111111111111111111111
-2147483647 :
源代码为111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
代码为100000000000000000000000000000,
补数是10000000000000000000000000001
所以最小的负数是-2147483647吗? 不,不是。
在二进制中,0有两种表示方法。
的源代码为000000000000000000000000,
-0的源代码为10000000000000000000,
因为0只需要一个,所以把-0拿来当做一个最小的数-2147483648。
-2147483648的补数显示为10000000000000000,32位没有源代码。
请注意,此补数不是真正的补数。 真正的补数是1,000,0000,0000,0000,0000,0000,0000,0000,溢出。
因此,有符号32位int型整数是-2147483648~2147483647