帶符號數,有三種表示方法,即:原碼、反碼和補碼。
但是,在計算機系統中,數值壹律用補碼來表示和存儲。
所以,在計算機系統中,原碼和反碼,都是不存在的。
使用補碼的意義:可以把減法或負數,轉換為加法運算。
因此,就能簡化計算機的硬件。
=====================
補碼的概念,來自於:補數。
比如鐘表,時針轉壹圈,周期是 12 小時。
那麽,倒撥 3 小時,可以用正撥 9 小時代替。
9,就是-3 的補數。 計算方法: 9 = 12-3。
同理,分針倒撥 X 分,可以用正撥(60-X)?代替。
60,是分針的周期。
同理,三角函數的周期是 2π。 那麽,
在-π/2 處?的函數值,就與?2π-π/2 = +3π/2?處?相同。
------------
當妳使用兩位十進制數:0~99,周期就是 壹百。
那麽,減壹,就可以用 +99 代替。
24-1 = 23
24 + 99 = (1) 23
舍棄進位,這兩種算法,功能就是相同的。
於是,99 就是 -1 的補數。
其它負數的補數,可以按照下式來求:
補數 = 周期 + 負數
------------
計算機中使用二進制,補數,就改稱為補碼。
八位二進制是:0000 0000~1111 1111。
相當於十進制:0~255, 周期就是 256。
那麽,-1,就可以用 255 = 1111 1111 代替。
所以:-1 的補碼,就是 1111 1111 = 255。
同理:-2 的補碼,就是 1111 1110 = 254。
繼續:-3 的補碼,就是 1111 1101 = 253。
。。。
最後:-128 的補碼,就是 1000 0000 = 128。
負數補碼的計算公式: 256 + 這個負數 。
(式中的 256 = 2^8,是八位二進制的周期。)
正數,並不存在補碼的問題。
所以,正數,並沒有補碼,可以直接運算。
(也有人亂說:正數本身就是補碼。)
------------
求解算式: 7-3 = 4。
計算機中,並沒有減法器,必須改用補碼相加。
列豎式如下:
7 的補碼=0000 0111
-3的補碼=1111 1101--相加-------------
得: (1)?0000 0100?= 4 的補碼
舍棄進位,只保留八位,結果完全正確。
------------
借助於補碼,可以簡化計算機的硬件。
原碼和反碼,都沒有這種功能。
所以,在計算機中,根本就沒有原碼和反碼。
它們都是什麽? 就不用關心了。