2015-11-03 47 views
0

任何人都可以闡明爲什麼j仍然保持負值。Integer.MIN_VAL仍顯示負值

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

請與您所使用的語言添加一個標籤(單擊 「編輯」,在問題的底部)。 – kebs

+0

因爲JAVA的'Integer.MAX_VALUE'是'2147483647'。爲什麼它回退到MIN_VALUE我不知道。也許有些JAVA大師會解釋這一點。 –

回答

1
Integer.MIN_VALUE = -2147483648 
Integer.MAX_VALUE = 2147483647 

因此,如果您切換MIN_VALUE的符號,你應該得到2147483648這是一個溢出。

2

Integer.MIN_VALUE是-2 (0x80000000)和Integer.MAX_VALUE的是2 -1(0x7fffffff)。

如果您否定Integer.MIN_VALUE,您將得到2 ,這比Integer.MAX_VALUE多1,因此它不適合。超出最大值後,它會變成負值。

計算機計算值爲a的否定如下:NOT(a) + 1。 所以,讓我們說,我們要通過否定1計算-1

  • 我們採取0x00000001
  • 應用NOT:0xffffffe
  • 增量:0xffffffff

,並反向,否定-1:

  • 採取0xffffffff
  • 申請NOT:0x00000000
  • 增量:0x00000001

類似地,否定-2 :

  • 採取0x80000000
  • NOT:0x7fffffff(Integer.MAX_VALUE的)
  • 增量:0x80000000(Integer.MIN_VALUE的)