2015-03-19 12 views
4

爲什麼以及如何操作 System.out.println(〜4); 給出輸出-5 和 System.out.println(〜0); 給出-1?Java中的二進制補碼操作符

+0

整數Java中使用兩種的completement,不是一個人的補充,而你正在使用的運營商被稱爲按位取反,而不是「二進一個補」 – fge 2015-03-19 08:21:15

+1

@fge,但*是*叫的人補充。 – harold 2015-03-19 09:49:45

+0

這就是@harold。補碼是最常用的術語,其次是「按位不」。我從來沒有聽說過「按位否定」這個詞。雖然我看到這個詞也是合法的,但它與「否定」很接近,實際上它是2s的補充,而不是OP所問的。由於潛在的混淆,我會避免使用該術語。 – BobDoolittle 2016-05-03 21:39:55

回答

10
4 is 00000000 00000000 00000000 00000100 

~4 is 11111111 11111111 11111111 11111011 = -5 

0 is 00000000 00000000 00000000 00000000 

~0 is 11111111 11111111 11111111 11111111 = -1 
+0

找到最簡單的答案來補充任何操作員! – Apurva 2015-03-19 08:32:48

0

如果你想知道爲什麼

11111111 11111111 11111111 11111011 = -5 

,你可以閱讀更多關於補數和負數:

two's complement

1

一些否定逆轉它的位。但是在邏輯上把 - (負號)標誌放在數字上就變成了1+(~x)

由於-x = 1+(~x) 從而(~x) = -x -1