java中int的最大值为十进制的2147483647,也就是java能进行操作的最大数值,超出就会显示不正常。针对以下问题进行讨论。

1.最大值为什么是2147483647?

  java中int类型占4个byte,1个byte有8个bit,也就是32个字节,也叫32位。在位的运算中,最高位为该值正负的判断,正数为0,负数为1.则int的最大值用二进制表示为 01111111111111111111111111111111。根据二进制转十进制的计算方法,该值为 2^0 累加到 2^30。用java代码表示为;

1 int tmp = 0;
2 for (int i = 0; i <= 30; i++){
3   tmp = tmp + (1 << i);
4 }

(1 << i):
  << 无符号左移,相当于前面的数字乘以 2^i; (1 << 1) 就是1乘以2的1次方,(1 << 2) 就是1乘以2的2次方...,

计算得出java中int最大值为 2147483647。

2. (2^0 累加到 2^30次方) 也等于 (2^31 - 1)

等比数列前n项目计算为 Sn = a1(1 - q^n) / (1 - q)
带入得 Sn = 1 (1 - 2^31) / (-1)
上述等式成立

  

3.最小值的计算

32位最小值的二进制表示为10000000000000000000000000000000,故最小值为 -2^31。根据二进制的计算,可得如下等式 Integer.MAX_VALUE + 1 = Integer.MIN_VALUE = -2147483648

Integer.MAX_VALUE + 1 = Integer.MIN_VALUE = -2147483648
表示为:
01111111111111111111111111111111(最大值) + 1 = 10000000000000000000000000000000(最小值)

  

04-18 17:22