为什么 java int 类型的有效值在 -2,147,483,648 到 2,147,483,647 范围内?
Why java int type has valid value in range -2,147,483,648 to 2,147,483,647?
我想知道为什么 java int 类型(32 位有符号)在 -2,147,483,648 到 2,147,483,647 范围内有有效值,但在(-2,147,483,648 到 2,147,483,648)范围内没有?
现代计算机中数字的主要表示是某种形式的二进制表示。它由取值 0 或 1 的固定数量的位组成。在 Java 中,int
被 指定 使用 32 位的二进制表示。
一个 32 位二进制表示可以有 2^32 个状态。 (这是一个数学事实,可以从第一性原理证明。)
考虑从 -2^31 到 +2^31 的数学整数:
1到2^31(含)之间有2^31个数
有 2^31 个数字在 -1 到 -(2^31)(含)之间
零值不在上述范围内。
所以计算从-2^31到+2^31的数字,我们总共得到2^31 + 2^31 + 1个值。那是 2^32 + 1,这比 2^32 状态中可以表示的值更多。
你的建议在数学上是不可能的。
我想知道为什么 java int 类型(32 位有符号)在 -2,147,483,648 到 2,147,483,647 范围内有有效值,但在(-2,147,483,648 到 2,147,483,648)范围内没有?
现代计算机中数字的主要表示是某种形式的二进制表示。它由取值 0 或 1 的固定数量的位组成。在 Java 中,int
被 指定 使用 32 位的二进制表示。
一个 32 位二进制表示可以有 2^32 个状态。 (这是一个数学事实,可以从第一性原理证明。)
考虑从 -2^31 到 +2^31 的数学整数:
1到2^31(含)之间有2^31个数
有 2^31 个数字在 -1 到 -(2^31)(含)之间
零值不在上述范围内。
所以计算从-2^31到+2^31的数字,我们总共得到2^31 + 2^31 + 1个值。那是 2^32 + 1,这比 2^32 状态中可以表示的值更多。
你的建议在数学上是不可能的。