負數轉換為補碼

2021-07-08 10:17:55 字數 1429 閱讀 2080

有些基礎還得重新拿起來, 以前剛學的時候不知道為什麼,現在才真能豁然開朗。

我們已經知道計算機中,所有資料最終都是使用二進位制數表達。

我們也已經學會如何將乙個10進製數如何轉換為二進位制數。

不過,我們仍然沒有學習乙個負數如何用二進位制表達。

比如,假設有一 int 型別的數,值為5,那麼,我們知道它在計算機中表示為:

00000000 00000000 00000000 00000101

5轉換成二制是101,不過int型別的數占用4位元組(32位),所以前面填了一堆0。

現在想知道,-5在計算機中如何表示?

在計算機中,負數以其正值的補碼形式表達。

什麼叫補碼呢?這得從原碼,反碼說起。

原碼:乙個整數,按照絕對值大小轉換成的二進位制數,稱為原碼。

比如 00000000 00000000 00000000 00000101 是 5的 原碼。

反碼:將二進位制數按位取反,所得的新二進位制數稱為原二進位制數的反碼。

取反操作指:原為1,得0;原為0,得1。(1變0; 0變1)

比如:將00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。

稱:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反碼。

反碼是相互的,所以也可稱:

11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互為反碼。

補碼:反碼加1稱為補碼。

也就是說,要得到乙個數的補碼,先得到反碼,然後將反碼加上1,所得數稱為補碼。

比如:00000000 00000000 00000000 00000101 的反碼是:11111111 11111111 11111111 11111010。

那麼,補碼為:

11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011

所以,-5 在計算機中表達為:11111111 11111111 11111111 11111011。轉換為十六進製制:0xfffffffb。

再舉一例,我們來看整數-1在計算機中如何表示。

假設這也是乙個int型別,那麼:

1、先取1的原碼:00000000 00000000 00000000 00000001

2、得反碼:     11111111 11111111 11111111 11111110

3、得補碼:     11111111 11111111 11111111 11111111

可見,-1在計算機裡用二進位制表達就是全1。16進製為:0xffffff

負數轉換為補碼

有些基礎還得重新拿起來,以前剛學的時候不知道為什麼,現在才真能豁然開朗。我們已經知道計算機中,所有資料最終都是使用二進位制數表達。我們也已經學會如何將乙個10進製數如何轉換為二進位制數。不過,我們仍然沒有學習乙個負數如何用二進位制表達。比如,假設有一 int 型別的數,值為5,那麼,我們知道它在計算...

負數原碼與補碼之間相互轉換

背景 計算機內部用補碼表示二進位制數。符號位 1 表示負數,0 表示正數。正數 無區別,正數 的原碼 反碼 補碼 若已知 負數 8,則其 原碼為 1000 1000,1為符號位,為1代表負數,為0代表正數 反碼為 1111 0111,符號位保持不變,其他位置按位取反 補碼為 1111 1000,反碼...

(七)負數的補碼

我們都知道二進位制只有0和1 比如1在8 位的二進位制數字裡的原碼是 0000 0001,而7 的原碼是 0000 0111 1的原碼則為 1000 0001,其中第乙個紅色數字 1,表示負號,是符號位。如果是正數則為0,7的原碼是 1000 0111 那麼變成補碼的話,正數的補碼和原碼相同,負數的...