補碼是計算機語言中很基礎也很重要的乙個概念,教科書上講,計算機中的數值都是以補碼的形式儲存的,有了補碼,可以變減法為加法,但具體怎麼實現的呢?先從基礎說起。
此型別表示範圍是正整數和0,不含負數。如8位無符號數的表示範圍為:0~255.無符號數的每一位都有權重。
表示範圍基本上是一半正整數,一半負整數。8位有符號整數的大致範圍為-127~127.有符號整數的最高位用來表示數的正負,一般用0表示正數,用1表示負數,該位被稱為符號位,沒有權重。
無符號整數和有符號整數在形態上並沒有區別,以8位整數10000010b(b表示2進製數)為例。它可以作為無符號數來使用,其最高有效位上的「1」表示它對該數的值的貢獻為2的7次冪,即128,它對應的真值為130;該8位整數也可以作為有符號數來使用,其最高有效位上的「1」表示它是乙個負數,但到底其值是多少,有待繼續討論。
下表為8位整數的原碼、反碼、補碼表示形式
十進位制數
二進位制真值
原碼表示
反碼表示
補碼表示
+127
+1111111
01111111
01111111
01111111
+126
+1111110
01111110
01111110
01111110
+2+0000010
00000010
00000010
00000010
+1+0000001
00000001
00000001
00000001
+0+0000000
00000000
00000000
00000000
-0-0000000
10000000
11111111
00000000
-1-00000001
10000001
11111110
11111111
-2-00000010
10000010
11111101
11111110
-126
-1111110
11111110
10000001
10000010
-127
-1111111
11111111
10000000
10000001
-128
-10000000
不能表示
不能表示
10000000
符號位為0表示正,為1表示負;其餘各位等同於真值的絕對值。8位原碼的表示範圍為:-127~+127。
符號位為0表示正,為1表示負;正數的表示同原碼,負數的表示是在原碼表示的基礎上通過將符號位以外各位取反來獲得。8位反碼的表示範圍為-127~+127。
符號位為0表示正,為1表示負;正數的表示同原碼,負數的表示是在反碼表示的基礎上通過加1來獲得。由於資料0的表示方法唯一,並被劃歸為正數,所以負數方向的表示能力比正數多出乙個,這個多出的負數為-128。8位補碼的表示範圍為-128~+127。採用補碼,可以將兩個數的減運算變為這兩個數補碼的加運算來實現。對計算機來說,求補和求和都是很簡單的運算,比減法容易實現。
將乙個負數由真值變為補碼或者反向變化,或者將連個數的減法變為補碼相加,都會用到求補運算。除了「求反加1」的方法外,還可以採用「帶借位0減」的方法。
例如,將真值-37h(h表示16進製制數,即-00110111b)變為它對應的8位補碼:
1,00000000b - 00110111b = 11001001b = c9h
又如,將8位補碼b8h(即10111000b,注意它是乙個負數)還原為真值:
-[1,00000000 - 10111000b] = -01001000b = -48h
採用「帶借位0減」的方法,對十六進製制數的求補運算尤其方便,例如對-37h求補:
1,00h - 37h = c9h
8位整數的減法運算,在計算機中通過補碼加來實現,例如:
x - 37h = x + c9h
補碼的計算
1 在計算機系統中,數值一律用補碼來表示 儲存 主要原因 使用補碼,可以將符號位和其它位統一處理 同時,減法也可按加法來處理。另外,兩個用補 碼表示的數相加時,如果最高位 符號位 有進製,則進製被捨棄。2 補碼與原碼的轉換過程幾乎是相同的。求給定數值的補碼表示分以下兩種情況 1 正數的補碼 與原碼相...
128的補碼及原碼 反碼 補碼
乙個位元組佔8位 乙個字長為n的機器數能表示不同的數字的個數是固定的2 n個,n 8時2 n 256 用來表示有符號數,數的範圍就是 2 n 1 2 n 1 1,n 8時,這個範圍就是 128 127。用來表示無符號數,就不需要用一位來表示符號位,n位機器數全部用來表示是數值,這時表示數的範圍就是0...
1的補碼及2的補碼
一 計算機的負數表示 二 1的補碼one s complement 反碼 三 2的補碼two s complement 補碼 資料在計算機中由乙個乙個的0,1位元表示,所以在表示負數的時候,不能直接新增符號 來表示這是個負數,必須採用一些規範或者約定來區分正數和負數。有四種比較有名的表示負數的方法 ...