任何人都可以解释为什么j仍然持有负值。
int i=Integer.MIN_VALUE;
System.out.println(i); //output, -2147483648
int j=-i;
System.out.println(j); // output, -2147483648
答案 0 :(得分:2)
Integer.MIN_VALUE是-2 31 (0x80000000
),Integer.MAX_VALUE是2 31 -1(0x7fffffff
)
如果你否定Integer.MIN_VALUE,你会得到2 31 ,这比Integer.MAX_VALUE高1,所以它不适合。超出最大值,它会变成负值。
计算机计算值a
的否定,如下所示:NOT(a) + 1
。
所以,假设我们想通过否定-1
来计算1
:
0x00000001
,0xffffffe
0xffffffff
。相反,否定-1:
0xffffffff
0x00000000
0x00000001
同样,否定-2 31 :
0x80000000
0x7fffffff
(Integer.MAX_VALUE)0x80000000
(Integer.MIN_VALUE)答案 1 :(得分:1)
Integer.MIN_VALUE = -2147483648
Integer.MAX_VALUE = 2147483647
因此,如果您切换MIN_VALUE
的符号,您应该得到2147483648这是一个溢出。