原碼、反碼和補碼概述
阿新 • • 發佈:2019-01-26
原碼:原碼是計算機中對數字的二進位制表示方法,原碼的最高位是符號位,0表示正數,1表示負數。
反碼:反碼是數值儲存的一種,多應用於系統環境設定,如linux平臺的目錄和檔案的預設許可權的設定umask,就是使用反碼原理。反碼的計算是原碼的符號位不動,其餘的取反。
補碼:在計算機系統中,數值一律用補碼來表示和儲存。補碼的計算區分正負數,正數的補碼和原碼相同,負數的補碼是符號位不變,反碼加1。
例子:
- -6:
- 原碼:10000110
- 反碼:11111001
- 補碼:11111010
- -1:
- 原碼:10000001
- 反碼:11111110
- 補碼:11111111
計算機系統為什麼使用補碼?
先看例子:
- 0:用正數表示
- 原碼:00000000
- 反碼:01111111
- 補碼:00000000
- 0:用負數表示
- 原碼:10000000
- 反碼:11111111
- 補碼:00000000
所以0不管使用正數還是負數表示,它的補碼都是一樣的。
例子:
-6+5:
11111010
+ 00000101
= 11111111
-4+5:
11111100
+ 00000101
= 00000001
-3+5:
11111101
+ 00000101
= 00000010
可以發現補碼做數值相加是非常方便的,-3+5等同於5-3,所以減法也是如此。運算過程是相同的,不需要額外的硬體電路。需要注意的是計算機數值相加,符號位是需要參與運算的。