在 java整形數值表示--基礎 中說明了符號數採用補碼錶示法帶來的優勢,可是並無說明補碼是如何推導過來的。java
假設整形數值最多8位數,當採用無符號數表示法時,數值範圍爲0~255,而採用有符號數表示法時,可將128-255映射爲-128~-1,而0-127保持不變,來表示數值範圍-128~127:spa
128=1000_0000~-128.net
129=1000_0001~-127blog
130=1000_0010~-126get
...基礎
255=1111_1111~-1二進制
0=0000_0000~0方法
1=0000_0001~1ps
....tar
127=0111_1111~127
實際上這種方法叫作補碼錶示法,例如給定一個負數-100須要獲得它的補碼須要將255-100+1=156~1001_1100。直觀看來首位只要爲1即爲負數,而0則爲正數,但不能簡單的認爲首位是符號位:
例如假設要表示-5~4之間的10個數,能夠用0~9之間的5~9來表示-5~-1,而0~4保持不變,即:
5~-5
6~-4
7~-3
8~-2
9~-1
0~0
1~1
2~2
3~3
4~4
所以首位大於等於5的表示負數,而小於等於4的表示正數。這也說明了對於二進制而言,千萬不要簡單的將首位理解爲符號位。