計算機原碼、反碼、補碼、移碼轉換及範圍
數據的表示:
|
數值1 |
數值-1 |
1-1 |
原碼 |
0000 0001 |
1000 0001 |
1000 0010 |
反碼 |
0000 0001 |
1111 1110 |
1111 1111 |
補碼 |
0000 0001 |
1111 1111 |
0000 0000 |
移碼 |
1000 0001 |
0111 1111 |
1000 0000 |
原碼:把一個數轉成二進制形式,二進制不足8位即在左邊補零。最左邊的位又叫做符號位,正數爲0,負數爲1 。如圖,在原碼中 1+(-1)=-2,可見原碼不能直接相加減。於是引入反碼類計算。
反碼:反碼正數值和原碼相同,不用轉換。負數值除符號位(最左邊)外,其餘取反( 0—>1,1—>0)。根據圖中把1+(-1)反碼相加減可以看等於0是正確的。
補碼:補碼正數值也和原碼相同,不用轉換。負數值在反碼基礎上在最低位加 1 即可。
移碼:在補碼基礎上,把補碼符號位取反 即可,其餘不做改變。
數值表示範圍:
|
整數 |
原碼 |
-(2n-1-1)~2n-1-1 |
反碼 |
-(2n-1-1)~2n-1-1 |
補碼 |
- 2n-1 ~ 2n-1-1(大一個範圍) |
爲什麼補碼大一位呢?
答:因爲原碼和反碼有兩種0 :
正0{原碼:0000 0000 ,反碼:0000 0000}
負0{原碼:1000 0000 ,反碼:1111 1111}
而補碼0只有唯一的表示(0000 0000),而(1000 0000)被人爲定義爲最小負數,即-128。所以補碼能表示的真值比原碼多 一個。