原碼 反碼 補碼 移碼超級無敵清楚的講解

2021-10-02 14:25:45 字數 1263 閱讀 8218

以8位(乙個位元組)的資料為例:

有符號資料的表示範圍為:-(2的n-1次方)-1到2的n-1次方;

無符號資料的表示範圍為0到2的n-1次方

無符號資料與原碼、反碼、補碼的關係:

無符號數全是正數,原碼就是該正整數的二進位制表示方法;

無符號整數的原碼=反碼=補碼;

有符號數與原碼、反碼、補碼的關係

(正整數的原碼=反碼=補碼)

原碼:

有符號資料中的正整數的原碼就是該數的二進位制數,如:2用八位二進位制

表示為00000010

有符號資料中的負整數的原碼就是正整數的原碼的最高位(符號位)為1,

其他位不變,如-2的原碼用八位來表示為10000010

反碼:

有符號負整數的反碼就是在原碼的基礎上,符號位(最高位)不變,保

持為1,其餘位按位取反(也就是原來為1的位變成0,原來位0的位變為1),

-2的反碼就是11111101

補碼:

有符號數的補碼就是在原碼的基礎上,符號位不變,其餘位按位取反,

最後在最低位加一,-2的補碼就是11111110

為什麼會有原碼、反碼、補碼呢?計算機中的數都是用補碼的形式儲存的;

也就是正數在計算機中的儲存方式就是補碼(正數的原碼=反碼=補碼);

負數在計算機中的儲存方式也是補碼(負數的原碼、反碼、補碼規則在上面);

私以為原碼、反碼毫無卵用,有用的只是補碼,因為負數的二進位制並不那麼記,也不好推算,所以制定了原碼、反碼的概念,方便從正數的二進位制數推算除負數在計算機中的二進位制數,為什麼這樣說呢?下面我以一張**釋。

這張圖依然以八位二進位制來解釋

右邊那一半就是正數的二進位制表示,也是其原碼、反碼、補碼;

左邊那一半就是負數的補碼形式,有沒有發現左邊的數就是右邊的數按位取反;-1的補碼就是0的二進位製取反,-128的補碼就是127的二進位製取反;

而且127的二進位制+1就是-127的補碼,很神奇對不對,好像經歷了乙個輪迴。計算機中只有乙個加法運算器,沒有減法運算器,也沒有乘除法運算器。

移碼:

移碼和補碼的表示範圍一樣,只不過移碼使用1表示正,0表示負

原碼,補碼,反碼,移碼

為什麼有這些碼 定義機器字長為n,若數值x是純整數 若數值x是純小數,對純小數的原碼計算是先將其轉換為二進位制 必須的 例 若機器字長為8,則 1 原 0 0000001 1 原 1 0000001 7 原 0 0000111 127 0 1111111 127 原 1 1111111 7 原 1 ...

原碼,反碼,補碼,移碼

移碼 又叫增碼 是符號位取反的補碼,先將符號位取反,再取補碼,意思就是正數只將 變為1,負數將 變為0,再取補 x 1011 x 移 11011 符號位 1 表示正號 x 1011 x 移 00101 符號位 0 表示負號 一般用做浮點數的階碼,引入的目的是為了保證浮點數的機器零為全0。一 原碼 求...

原碼 反碼 補碼 移碼

如果機器字長為n,那麼乙個數的原碼就是用乙個n位的二進位制數,其中最高位為符號位 正數為0,負數為1。剩下的n 1位表示概數的絕對值。例如 x 101011 x 原 00101011 x 101011 x 原 10101011 位數不夠的用0補全。ps 正數的原 反 補碼都一樣 0的原碼跟反碼都有兩...