如题,
为何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_VALUE的补码=它自己
所以

博客探讨了Math.abs(Integer.MIN_VALUE)为什么会等于Integer.MIN_VALUE。解释涉及到负数的补码表示法,指出Integer.MIN_VALUE的补码与其本身相同,导致在计算绝对值时发生进位,使得结果保持不变。
最低0.47元/天 解锁文章
1573

被折叠的 条评论
为什么被折叠?



