如题,
为何Math.abs(Integer.MIN_VALUE) = Integer.MIN_VALUE ?
查看Math.abs方法,代码如下
public static int abs(int a) {
return (a < 0) ? -a : a;
}
也就是说Integer.MIN_VALUE = (0-Integer.MIN_VALUE )
原因如下:
负数的2进制计算,采用补码的方式进行。
0-Integer.MIN_VALUE = 0+(-Integer.MIN_VALUE)
Integer.MIN_VALUE = 0x10000000,00000000,00000000,00000000
那么它的补码是
换算流程
1.先换算成反码
01111111,11111111,11111111,11111111
2.加1
10000000,00000000,00000000,00000000
也就是说Integer.MIN