0 爲正數jvm
原碼 00000000 00000000 00000000 00000000 反碼 00000000 00000000 00000000 00000000 正數反碼等於原碼 補碼 00000000 00000000 00000000 00000000 正數補碼等於原碼
0 爲負數
原碼 10000000 00000000 00000000 00000000
反碼 11111111 11111111 11111111 11111111 負數反碼等於原碼符號位不變,其他取反
補碼 00000000 00000000 00000000 00000000 負數補碼等於反碼+1spa
用補碼
1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]補 + [1111 1111]補 = [0000 0000]補=[0000 0000]原
用反碼
1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0code
數值 | 原碼 | 反碼 | 補碼 |
---|---|---|---|
+0 | 0000 0000 | 0000 0000 | 0000 0000 |
-0 | 1000 0000 | 1111 1111 | 0000 0000 |
負數原碼轉補碼,最高位不變,其他取反,而後 +1
10000001
11111110
11111111
負數補碼轉原碼,最高位不變,其他取反,而後+1 補碼->反碼->原碼->反碼->補碼 ,(二進制數,先-1再取反和先取反後+1,結果同樣)
11111111
10000000
10000001 rem
負數反碼轉原碼
符號位不變,其他取反
11111111
10000000get
區別:it
補碼能夠多表示一個範圍,實際上是利用補碼 10000000 的原碼是 = -128table
左移的規則只記住一點:丟棄最高位(符號位),0補最低位class
左邊空出的位用0或者1填補。正數用0填補,負數用1填補。注:不一樣的環境填補方式可能不一樣;
低位右移溢出則捨棄該位。二進制
左邊空出的位用0填補,低位右移溢出則捨棄該位。im
感謝您的耐心閱讀,若是您發現文章中有一些沒表述清楚的,或者是不對的地方,請給我留言,您的鼓勵是做者寫做最大的動力。
做 者 : @mousycoder