補碼和求補的區別以及計算機對減法的處理

2022-03-27 20:52:12 字數 1077 閱讀 3311

1、  補碼和求補運算

補碼:對於乙個帶符號的數來說,正數三碼合一(原碼、反碼、補碼都一樣);負數的反碼為其原碼除符號位以外的各位按位取反,負數的補碼是先取反然後加一,不要忘了負數的符號位為1。

求補運算與補碼的區別在於,求補運算時不考慮是否有符號位,所有的位都要取反,最後加一,它求得的結果不是求這個數的補碼,而是這個數相反數的補碼。

以0-0xff之間數的減法為例:

x-y=x+(-y)=x+(0x100-y)-0x100

y+y(反)=0xff

y+y(反)+1=0x100

由以上三個式子可以推導出,neg(y)=0x100-y=y(反)+1,即x-y=x+neg(y)。

注:1)這裡我們要區分乙個反數和反碼的區別,我們以二進位制來講:反數實際就是對原碼的每一位進行包括符號位在內進行取反,即0變1,1變0,對反數的理解可以參考

2)neg是求補運算,求補運算是反數加1,這也就是我們上面說的求補運算時不考慮正負,對符號位也要求反,乙個數的求補就是0減去這個數,上述0x100在我們討論的0-0xff之間的數來說就是0。

3)負數的求補和補碼可以這樣記:轉換成二進位制後,求補是從右向左找到第一位為1,包括這位1在內的右邊所有位數保持不變,左邊的全部取反;負數補碼是在求補的基礎上除了保證那位1和他右邊的所有位不變外,還要保證符號位也不變。

實際上處理減法我們可以採用兩種方式一種是補碼相加,一種就是求補的方式。例如:

12-8

12的三碼合一都為 0000,1100

-8的原碼:1000,1000

反碼:1111,0111

補碼:1111,1000

首先以補碼相加的形式:

12       0000,1100     

-  8     +1111,1000

4      10000,0100

最高位越界丟棄。另一種方式是求補x-y=x+neg(y),neg(8)=1111,1000

12       0000,1100     

-  8     +  1111,1000

4      10000,0100

其實這兩種方式都是一樣的,因為neg(x) = -x的補碼。

計算機的補碼和反碼

關鍵字 底層資料 名詞解釋 補碼 1 在計算機系統中,數值一律有補碼來表示 儲存 使用補碼,可以將符號位和其他位統一處理 同時,減法也可按加法來處理.另外,兩個用補碼表示的資料相加時候,如果最高位 符號位 有進製,則進違被捨棄.2 補碼與原碼的轉換過程幾乎是相同的 數值的補碼表示也分兩種情況 1 正...

計算機的補碼和反碼

關鍵字 底層資料 名詞解釋 補碼 1 在計算機系統中,數值一律有補碼來表示 儲存 使用補碼,可以將符號位和其他位統一處理 同時,減法也可按加法來處理.另外,兩個用補碼表示的資料相加時候,如果最高位 符號位 有進製,則進違被捨棄.2 補碼與原碼的轉換過程幾乎是相同的 數值的補碼表示也分兩種情況 1 正...

計算機原碼 反碼和補碼

原碼是什麼?原碼就是早期用來表示數字的一種方式 乙個正數,轉換為二進位制位就是這個正數的原碼。負數的絕對值轉換成二進位制位然後在高位補1就是這個負數的原碼 舉例說明 int型別的 3 的原碼是 11b b表示二進位制位 在32位機器上佔四個位元組,那麼高位補零就得 00000000 00000000...