2010-10-20 103 views
1

如果我用Java打印出~100,我得到-101。我正在努力工作。手動計算〜100

NOT(~)運算符反轉所有位。

100 in binary is 00000000000000000000000001100100

反相其位,得出:

11111111111111111111111110011011

現在怎麼辦?我如何獲得-101

+2

究竟是什麼,你上有符號數,期待一個二進制操作呢? – 2010-10-20 07:46:30

+2

你明白爲什麼'〜0'是'-1'嗎? – Gabe 2010-10-20 07:47:09

回答

10

Java使用二進制補碼(請參閱§4.2原語類型和值)要否定,請取補碼並添加一個補碼。

-x = ~x + 1 
~x = -x - 1 
~100 = -100 - 1 

另一種方式來思考,應該注意:

11111111111111111111111111111111 = -1 

然後做:用2的補體系統

11111111111111111111111111111111 (-1) 
- 11111111111111111111111110011011 (~x) 
=       1100100 (100) 

-1 - ~x = 100 
-1 - 100 = ~x 
~x = -101 
+0

http://en.wikipedia.org/wiki/Two%27s_complement – 2010-10-20 07:46:26

0

大部分系統都工作。在此係統中,正數與舊的二進制系統相同,而負數不同(這有助於使用相同數量的位映射另一個負數)

如果您想在此係統中編號並將其轉換回到舊的方式二進制:

〜(NegNumber)+1