Integer.MIN_VAL仍显示负值

时间:2015-11-03 16:10:47

标签: java integer

任何人都可以解释为什么j仍然持有负值。

   int i=Integer.MIN_VALUE;
   System.out.println(i);  //output, -2147483648
   int  j=-i;
   System.out.println(j);  // output, -2147483648 

2 个答案:

答案 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
  • 应用NOT:0xffffffe
  • 增量:0xffffffff

相反,否定-1:

  • 采取0xffffffff
  • 申请NOT:0x00000000
  • 增量:0x00000001

同样,否定-2 31

  • 选择0x80000000
  • NOT:0x7fffffff(Integer.MAX_VALUE)
  • 增量:0x80000000(Integer.MIN_VALUE)

答案 1 :(得分:1)

Integer.MIN_VALUE = -2147483648
Integer.MAX_VALUE =  2147483647

因此,如果您切换MIN_VALUE的符号,您应该得到2147483648这是一个溢出。