任何人都可以闡明爲什麼j仍然保持負值。Integer.MIN_VAL仍顯示負值
int i=Integer.MIN_VALUE;
System.out.println(i); //output, -2147483648
int j=-i;
System.out.println(j); // output, -2147483648
任何人都可以闡明爲什麼j仍然保持負值。Integer.MIN_VAL仍顯示負值
int i=Integer.MIN_VALUE;
System.out.println(i); //output, -2147483648
int j=-i;
System.out.println(j); // output, -2147483648
Integer.MIN_VALUE = -2147483648
Integer.MAX_VALUE = 2147483647
因此,如果您切換MIN_VALUE
的符號,你應該得到2147483648這是一個溢出。
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
,0xffffffe
0xffffffff
。,並反向,否定-1:
0xffffffff
0x00000000
0x00000001
類似地,否定-2 :
0x80000000
0x7fffffff
(Integer.MAX_VALUE的)0x80000000
(Integer.MIN_VALUE的)
請與您所使用的語言添加一個標籤(單擊 「編輯」,在問題的底部)。 – kebs
因爲JAVA的'Integer.MAX_VALUE'是'2147483647'。爲什麼它回退到MIN_VALUE我不知道。也許有些JAVA大師會解釋這一點。 –