原碼 反碼 補碼

2021-09-26 02:13:00 字數 2620 閱讀 4940

計算機中都是用補碼表示的。因為正數的原碼,補碼,反碼 相同,  所以正數用原碼表示,負數用補碼表示。負數如果也用原碼表示,表示範圍就只有255個數  -128無法表示。

最高位是0表示正數,是1表示負數。

10000000 表示 -128 的補碼,你可以理解為是乙個特殊性。

各種8位二進位制的表示法的資料範圍如下:

原碼: -127 ~ 127

反碼: -127 ~ 127

補碼: -128 ~ 127

補碼運算:正數為原碼本身,負數為原碼取反加一

127 為正數,其補碼 為 原碼 0111 1111

-127為負數,其補碼 為 原碼 0111 1111 取反 1000 0000 加 1 即1000 0001。(負數的補碼:絕對值取反,然後加 1)

根據這情況來看,表示 -0,不是的,-0 的原碼是1000 0000 補碼是 0000 0000。+0 的補碼也是 0000 0000

於是就有了規定 1000 0000 定為 -128 的補碼,這種定法和上面數學層面的表述是一致的。

這樣規定後,負數的補碼在機器中就好算了。在約定的範圍內(-128-+127,對16位32位64位等擴大範圍)

先將該負數取絕對值,再用二進位制表示出這個絕對值 (不管符號位),對該二進位制數進行取反加一操作就得到負數的補碼了

-128 絕對值是 128

128的二進位制表示為:

1000 0000

取反0111 1111

加11000 0000

這就是-128的補碼

這種辦法算出的結果符合「規定值」,規定而已。

正數

正數(定點小數、定點整數):

原碼,補碼,反碼相同;

移碼只要在原碼的最高位+1就可以了

負數

負數(定點小數、定點整數)

負數補碼求法:也就是 「絕對值的原碼取反加1」

反碼:保持原碼符號位不變,數值位取反

補碼:反碼的最低位+1 (即 取反加1,符號位也運算)

移碼:與補碼的符號相反,數值位保持不變

-1 原碼:1000 0001

-1 反碼:1111 1110  (符號位不變,數值位取反)

-1 補碼:1111 1111  (-1的反碼加1:1111 1110 +1 = 1111 1111)

原碼

將最高位做為符號位(0代表正,1代表負),其餘各位代表數值本身的絕對值

+7的原碼是:00000111

-7的原碼是:10000111

+0的原碼是:00000000

-0的原碼是:10000000

反碼

乙個數如果值為正,那麼反碼和原碼相同

乙個數如果為負,那麼符號位為1,其他各位與原碼相反

+7的反碼:0000 0111

-7的反碼:1111 1000

-0的反碼:1111 1111

補碼

求乙個負數的補碼時,取反加1時需要符號位參與運算,補碼運算(加減)也需要符號位參與運算

負數的補碼:符號位不動,其他位求反,最後整個數 + 1,得到原碼

原碼和反碼都不利於計算機的運算,如:原碼表示的 7 和 -7 相加,還需要判斷符號位。

正數:原碼,反碼補碼都相同

負數:最高位為1,其餘各位原碼取反,最後對整個數 + 1

+0 的 補碼 為 00000000

-0 的 補碼 也是 00000000

原碼補碼

+0  

0000 0000  

0000 0000

-01000 0000

符號位不變其他位取反得到1111 1111,然後加 1(符號位參與運算,即整個數加1) 得到補碼 0000 0000 ,所以 +0 和 -0 補碼一樣 

-7 的補碼:=

1 000  0111    (原碼)

1 111  1000    (反碼)

1 111  1001    (補碼)

兩個補碼運算(加減)符號位參與運算

+7 補碼  0000  0111

-7 補碼  1111  1001

+7 的補碼 加 -7 的補碼

0000  0111

1111  1001

0000  0000

補碼運算

用補碼進行運算,減法可以通過加法實現

7-6=1    (7 的補碼 和 -6 的補碼 相加)

7 的補碼 :0000  0111

-6 的補碼: 1111  1010

= 1 0000 0001      

最後的進製溢位(總共 8 位,這得到 9位,所以第 9 位捨棄),所以捨棄,得到  0000 0001 ,表示 1

-7+6 = -1

-7的補碼和6的補碼相加:11111001 + 00000110 = 11111111

11111111是-1的補碼

原碼 反碼 補碼

正數 原碼 反碼 補碼一樣 7 原 0 0000111 b 7 反 0 0000111 b 7 補 0 0000111 b 負數 原碼就是原來的表示方法 反碼是除符號位 最高位 外取反 補碼 反碼 1 7 原 1 0000111 b 7 反 1 1111000 b 7 補 1 1111001 b 當...

原碼 反碼 補碼

正數 原碼 反碼 補碼一樣 7 原 0 0000111 b 7 反 0 0000111 b 7 補 0 0000111 b 負數 原碼就是原來的表示方法 反碼是除符號位 最高位 外取反 補碼 反碼 1 7 原 1 0000111 b 7 反 1 1111000 b 7 補 1 1111001 b 當...

原碼 反碼 補碼

數值在計算機中表示形式為機器數 計算機只能識別0和1,使用的是二進位制,而在日常生活中人們使用的 是十進位制,正如亞里斯多德早就指出的那樣,今天十進位制的廣泛採用,只不過我們絕大多數人生來具有10個手 指頭這個解剖學事實的結果.儘管在歷史上手指計數 5,10進製 的實踐要比二或三進製計數出現的晚.摘...