大家好,欢迎来到程序视点
!我是小二哥。
对于Integer.MAX_VALUE + Integer.MAX_VALUE = ?
,主要考察大家对数据越界的理解!当然还有数据在计算机中二进制的表现形式!
先公布答案:-2
。
在JDK中,整形类型是有范围的,最大值为Integer.MAX_VALUE,即2147483647,最小值为Integer.MIN_VALUE为-2147483648。
对整形最大值加1,数学运算的结果为2147483648
,但这个值不在 Integer 的取值范围内呀!
因此,在计算机的运算结果中,它越界了! 那么此时值为多少呢?
我们先来看看Integer.MAX_VALUE+1的结果
public static void main(String[] args) {
int result = Integer.MAX_VALUE + 1;
System.out.println("Integer.MAX_VALUE + 1 =\t" +result);
}
输出结果为:-2147483648,即Integer.MIN_VALUE
。
Integer.MAX_VALUE + 1 = -2147483648
为什么呢?我们来解释下。
Integer.MAX_VALUE的二进制如下:
0111 1111 1111 1111 1111 1111 1111 1111
再加1的二进制运算如下:
这个1000 0000 0000 0000 0000 0000 0000 0000
二进制在计算机里,正好就是 Integer.MIN_VALUE 的值。
因此,就有以下结果:Integer.MAX_VALUE + 1 = Integer.MIN_VALUE
那我们怎么求Integer.MAX_VALUE + Integer.MAX_VALUE
呢?
让我们把上面的式子转换如下:
进而可以转换为:Integer.MIN_VALUE + Integer.MAX_VALUE - 1
Integer.MIN_VALUE + Integer.MAX_VALUE 的答案就很好求了,等于-1
。也就是:
因此,得到最终的答案-2
。
整体转换过程如下:
数据类型超过 MAX_VALUE,就会出现越界问题!那大家一起来算一算下面这题的答案:
Byte.MAX_VALUE + Byte.MAX_VALUE = ?