為什麼會有二進位制反碼和補碼以及關係

2021-10-02 04:25:37 字數 820 閱讀 7361

我們知道,乙個數在計算機中使用二進位制來表示的。以下都用乙個位元組來表示二進位制的儲存。例如:+1表示成二進位制為00000001,-1表示成二進位制為10000001.兩個正數相加計算機來十分方便,但是如果是乙個數減去乙個數會有正負之分,此時要比較出絕對值最大的那個數,然後加上符號位。這樣子做也太麻煩了,會讓計算機的硬體消耗更多的處理。

如果把乙個數減去乙個看作是兩個數相加,例如1+(-2),這樣子計算機只要能處理加法就好了,就不需要比較兩個數的絕對值大小的問題,所以反碼就出現了。正數的反碼就是本身,負數的反碼是除符號位之外取反。例如:+1的反碼是00000001,-1的反碼是11111110。1+(-1)=00000001+11111110=10000000。用反碼計算計算機是快速了很多,但是會存在+0和-0的問題。它們兩者都是乙個數,卻用了兩個二進位制反碼來表示它。很奇怪。

所以就產生了二進位制的補碼。二進位制的補碼是在二進位制反碼的基礎上加上1。正數的二進位制補碼就是二進位制原碼本身。所以+1的補碼為00000001,-1的補碼為11111111。+1+(-1)=00000001(補)+11111111(補)=00000000(補)=0(十進位制)。

同時,用二進位制補碼的方式來儲存乙個十進位制的數還能多表示乙個數。例如:-1+(-127)=10000001(原碼)+1111111(原始碼)=11111111(補碼)+10000001(補碼)=10000000(補碼)=-128(十進位制)。顯然,如果用原始碼來表示那麼乙個位元組的儲存的數值為-127-127,如果用反碼來表示乙個位元組儲存的數值為-128-127.所以這也就是為什麼用原始碼和補碼乙個位元組表示的數值的範圍不同的原因。

正數的原始碼反碼補碼相同。

反碼=原始碼除符號位外取反

補碼=反碼+1

在二進位制數中,為什麼會有原碼 反碼 補碼

由於二進位制只有0和1兩種數,因此在計算機中搭建運算電路時比十進位制運算電路簡單很多。1 原碼 在n為字長的原碼系統中,最左側表示符號位,在計算機中,我們人為定義二級制負數最左側為 1 表示負值,二進位制正數最左側為 0 表示正數。這樣的n位字長原始碼系統能表示的數值範圍為 2n 1 1 2n 1 ...

二進位制的補碼 反碼

本部落格介紹如何求二進位制數的原碼 補碼 反碼。對於正數來說,原碼,反碼,補碼都是一樣的。對於負數,即二進位制最高為1 求補碼 從數的右邊往左開始數,遇到 0 不理它,直到遇到第乙個 1 為止 不包括這個1 以後的每一位數取反即是它的原碼或補碼,符號位不變,還是 1 補碼的補碼是原碼 如原碼 110...

二進位制的原碼補碼和反碼

資料在計算機是以二進位制的形式來儲存的,按照資料的補碼來儲存的。正數的原碼 反碼 補碼都是相同的。負數的補碼就是它的相反數的原碼的各個位取反後,再 1得到的。0的原碼,補碼都為0。1個位元組可以表示2的8次方 256個數,按照正負數劃分就把它表示成範圍 128 127。二進位制的八位數裡邊用最高位表...