读书人

为什么-Integer.MIN_VALUE还是等与Int

发布时间: 2012-01-12 22:11:58 作者: rapoo

为什么-Integer.MIN_VALUE还是等与Integer.MIN_VALUE呢???
今天发现一个奇怪的现象,我根据这个现象写了一个简单的程序:

public class Simple {
public static void main(String[] args) {
int a=Integer.MIN_VALUE;
int b=-a;

if (b==a) {
System.out.println("******b==a*******");
}else{
System.out.println("******b!=a*******");
}

if (b==Integer.MAX_VALUE){
System.out.println("b==Integer.MAX_VALUE");
}else {
System.out.println("b!=Integer.MAX_VALUE");
}

}
}

我知道Integer.MIN_VALUE=-2147483648 而 Integer.MAX_VALUE=2147483647
所以上面程序中b就超出int的范围了,也肯定不等于Integer.MAX_VALUE,
但我的问题是:为什么-Integer.MIN_VALUE还是等与Integer.MIN_VALUE呢???

[解决办法]
我是这样理解的
-Integer.MIN_VALUE=2147483648
16位2进制数,2147483648=-2147483648
所以
-Integer.MIN_VALUE等与Integer.MIN_VALUE
[解决办法]
Integer.MIN_VALUE,即 -2147483648,二进制位如下:

1000 0000 0000 0000 0000 0000 0000 0000

在计算机的运算中,“-”(前缀)运算表示各二制位取反再加1,也就是说 b = -a 在计算机内部是 b = ~a + 1 这样处理的,所以上面的位就变成了:

   1000 0000 0000 0000 0000 0000 0000 0000 Integer.MIN_VALUE
取反 0111 1111 1111 1111 1111 1111 1111 1111 (取反之后变成了 Integer.MAX_VALUE)
加1 1000 0000 0000 0000 0000 0000 0000 0000 -Integer.MIN_VALUE(与原来的结果一样)
[解决办法]
Integer.MIN_VALUE,即 -2147483648,二进制位如下:

1000 0000 0000 0000 0000 0000 0000 0000

在计算机的运算中,“-”(前缀)运算表示各二制位取反再加1,也就是说 b = -a 在计算机内部是 b = ~a + 1 这样处理的,所以上面的位就变成了:

   1000 0000 0000 0000 0000 0000 0000 0000 Integer.MIN_VALUE
取反 0111 1111 1111 1111 1111 1111 1111 1111 (取反之后变成了 Integer.MAX_VALUE)
加1 1000 0000 0000 0000 0000 0000 0000 0000 -Integer.MIN_VALUE(与原来的结果一样)

---------------------------------
确实
[解决办法]
哎呀,楼上说的就是传说中的补码啊
[解决办法]
楼上正解

读书人网 >J2SE开发

热点推荐