原碼 反碼 補碼 移碼及其運算

2021-10-08 12:37:18 字數 2703 閱讀 6396

原碼:

如果機器字長為n,那麼乙個數的原碼就是用乙個n位的二進位制數,其中最高位為符號位:正數為0,負數為1。剩下的n-1位表示概數的絕對值。

例如: x=+101011 , [x]原= 00101011 x=-101011 , [x]原= 10101011

位數不夠的用0補全。

ps:正數的原、反、補碼都一樣:0的原碼跟反碼都有兩個,因為這裡0被分為+0和-0。

反碼:知道了什麼是原碼,那反碼就更是張飛吃豆芽——小菜一碟了。知道了原碼,那麼你只需要具備區分0跟1的能力就可以輕鬆求出反碼,為什麼呢?因為反碼就是在原碼的基礎上,符號位不變其他位按位取反(就是0變1,1變0)就可以了。

例如:x=-101011 , [x]原= 10101011 ,[x]反=11010100

補碼:補碼也非常的簡單就是在反碼的基礎上按照正常的加法運算加1。

例如:x=-101011 , [x]原= 10101011 ,[x]反=11010100,[x]補=11010101

ps:0的補碼是唯一的,如果機器字長為8那麼[0]補=00000000。

移碼:移碼最簡單了,不管正負數,只要將其補碼的符號位取反即可。

例如:x=-101011 , [x]原= 10101011 ,[x]反=11010100,[x]補=11010101,[x]移=01010101

運算過程:原碼->反碼->補碼->移碼

原碼 :二進位制(開頭第乙個表示符號0正1負)

反碼 :在原碼的基礎上,符號位不動,其他位取反 —注意,任何正數的原始碼=反碼=補碼,而負數都是通過補碼表示的。

補碼 :在反碼的基礎上,運算+1 —注意,任何正數的原始碼=反碼=補碼,而負數都是通過補碼表示的。

公式:兩數補碼的和==兩數和的補碼。
移碼 :在補碼的基礎上,符號位取反

101011(二進位制)–> 原碼 00101011 --> 反碼 01010100 --> 補碼 01010101–> 移碼 11010101

知道了計算方式後,我們應該研究一下原始碼、反碼、補碼的作用是什麼?

1 首先看原始碼

問:什麼是原始碼?

答:數字的二進位制形式(二進位制的數)

問:為什麼要用原始碼?

答:我是從2個方面看 1 從目前計算機的構造來看它只認識1/0,所以任何指令、數字、都會翻譯成乙個二進位制數傳遞給計算機。

2 規範和統一計算機的「交流語言」,統一對外的介面。
總結:原始碼是計算機唯一認識的語言結構。

2 反碼和補碼

問:反碼是什麼?

答:在原始碼的基礎上符號位不動,其他取反

問:為什麼要用反碼?

答:這個問題需要配合補碼一起檢視,因為補碼=反碼+1 所以一般的計算順序為 原始碼–>反碼–>補碼

*問:補碼是什麼?

答: 補碼=反碼+1(符號位參與運算)

問:為什麼要用補碼?

答:為了進行做加減運算,因為計算機只有加法計算器,所以a-b的處理方式為a+(-b),而這過程中如果直接用原始碼進行計算會出現問題

例1 10+(-10)= 0 (當使用原始碼進行計算減法)

10(十進位制) – 00001010(原始碼)

-10(十進位制) – 10001010 (原始碼)

00001010+

1******x ----->首先看到第一位是負數,顯然不是我們想要的結果

例子2 10-11 (試試用減法直接做計算吧)

10(十進位制) – 00001010(原始碼)

-11(十進位制) – 10001011(原始碼)

00001010-

***xx11111----->可以看到貌似跟答案-1(十進位制)差距還是比較明顯的

現在我們嘗試應用補碼進行計算

例子3 10+(-10)=0 (使用補碼)

10(十進位制) — 00001010(原始碼)----同原始碼(反碼)----同原始碼(補碼)

-10(十進位制) — 10001010(原始碼)----11110101(反碼)----11110110(補碼)

00001010+ 10的原始碼----注意正數用補碼(值等同於原始碼)

11110110 -10的補碼----注意負數用補碼

00000000 得到了0的補碼

例子3 10-11 (使用補碼)

10(十進位制) — 00001010(原始碼)----同原始碼(反碼)----同原始碼(補碼)

-11(十進位制) — 10001011(原始碼)----11110100(反碼)----11110101(補碼)

00001010+ 10的補碼

11110101 -11的補碼

11111111— 得到了-1的反碼

從這4個例子可以看出反碼和補碼使用的作用了,用於為二進位制負數做運算時的一種轉換。

再次總結運算過程

數值有正負之分,計算機就用乙個數的最高位存放符號(0為正,1為負).這就是機器數的原碼了.假設機器能處理的位數為8.即字長為1byte,原碼能表示數值的範圍為 127~(-127)

運算過程:原碼->反碼->補碼->移碼

原碼 :二進位制(開頭第乙個表示符號0正1負)

反碼 :在原碼的基礎上,符號位不動,其他位取反 —注意,任何正數的原始碼=反碼=補碼,而負數都是通過補碼表示的。

補碼 :在反碼的基礎上,運算+1 —注意,任何正數的原始碼=反碼=補碼,而負數都是通過補碼表示的。

公式:兩數補碼的和==兩數和的補碼。
移碼 :在補碼的基礎上,符號位取反

原碼,補碼,反碼,移碼

為什麼有這些碼 定義機器字長為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的原碼跟反碼都有兩...