int取值范围

总所周知int类型在计算机中占4个字节、4*8=32位,因此int类型数据的取值范围为:-231 ~ 231-1

即:-2147483648 – 2147483647,那么这是如何得来的呢?

在计算机中数据都是由二进制表示,数据存储时首位作为符号位控制数的正负,例如对于原码:

0000 0000 | 0000 0000 | 0000 0000 | 0000 0001 ———— 表示 +1
1000 0000 | 0000 0000 | 0000 0000 | 0000 0001 ———— 表示 -1

而在实际存储的过程中,所有数值都是按照补码来存储的。

关于计算机为什么要用补码可见此处

因此对于 正数 来说原码即是补码,其所能表示的最大数为:

0111 1111 | 1111 1111 | 1111 1111 | 1111 1111 ———— 表示 231-1 = 2147483647

而对于 负数 来说补码为原码除符号位之外取反后加1(或除符号位之外最后一位1的前面其他位置取反),其所能表示的最小负数为:

1000 0000 | 0000 0000 | 0000 0000 | 0000 0001 ———— 补码
1111 1111 | 1111 1111 | 1111 1111 | 1111 1111 —————– 原码,表示 -231+1 = -2147483647

少了一位 -231 ?那么为什么说int类型数据的取值范围为 -231 ~ 231-1 呢?

我们先来看一下数 的表示:

0000 0000 | 0000 0000 | 0000 0000 | 0000 0000 ———— 表示 +0
1000 0000 | 0000 0000 | 0000 0000 | 0000 0000 ———— 表示 -0

0竟然有两种表示方法?那么既然这么浪费为什么不加以利用起来呢?

因此规定:1000 0000 | 0000 0000 | 0000 0000 | 0000 0000 即 -0 表示 -231 ,于是便有了 -0 是最小的负数这句话了。