負數為什麼用補碼表示 補碼定義

2021-08-26 14:48:06 字數 2538 閱讀 8930

我們都知道負數在計算機中是以補碼(忘了補碼定義的戳這裡)表示的,那為什麼呢?本文嘗試了解補碼的原理,而要想理解它,首先得理解算術中「」的概念。所以首先看一下什麼是模,然後通過乙個小例子來理解補碼。

c語言規定,把記憶體的最高位作為符號位,且用0表示正數,用1表示負數。

2.1 原碼

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

2.2 反碼

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

2.3 補碼

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

所以 -6 在計算機器的表示形式為:

# -6 的正值 6 的二進位制: 00000000 00000000 00000000 00000110

# 取反得反碼: 11111111 11111111 11111111 11111001

# +1 得補碼,即 -6 在計算機中的二進位制表示: 11111111 11111111 11111111 11111010

3.1 什麼是模數

in mathematics, modular arithmetic is a system of arithmetic for integers, where numbers 「wrap around」 upon reaching a certain value—the modulus (plural moduli).

3.1.1 理解

是指乙個計量系統的計數範圍。如時鐘等。計算機也是乙個計算器,它也是有乙個計量範圍,即都存在乙個「模」。 

如時鐘的計量範圍是0~11,模 = 12。 

32位計算機的計量範圍是2^32,模 = 2^32。 

「模」是計量器產生「溢位」的量,它的值在計量器上表示不出來,計量器上只能表示出模的餘數,如12的餘數有0,1,2,3,4,5,6,7,8,9,10,11。

3.2 補數

假設當前時針指向11點,而準確時間是8點,調整時間可有以下兩種撥法:

在以模為12的系統中,加9和減3效果是一樣的,因此凡是減3運算,都可以用加9來代替。對「模」12而言,9和3互為補數(二者相加等於模)。所以我們可以得出乙個結論,即在有模的計量系統中,減乙個數等於加上它的補數,從而實現將減法運算轉化為加法運算的目的。

3.3 再談「模」

從上面的化減法為加法,以及所謂的溢位等等可以看到,「模」可以說就是乙個太極陰陽轉化,周而復始,無始無終,迴圈往復

計算機上的補碼就是算術裡的補數。 

設我們有乙個4位的計算機,則其計量範圍即模是 

2^4 = 16,所以其能夠表示的範圍是0~15,現在以計算5 - 3為例,我們知道在計算機中,加法器實現最簡單,所以很多運算最終都要轉為加法運算,因此5-3就要轉化為加法:

# 按以上理論,減乙個數等於加上它的補數,所以

5 - 3

# 等價於 5 + (16 - 3) // 算術運算單元將減法轉化為加法

# 用二進位制表示則為: 0101 + (10000 - 0011)

# 等價於 0101 + ((1 + 1111) - 0011)

# 等價於 0101 + (1 + (1111 - 0011))

# 等價於 0101 + (1 + 1100) // 括號內是3(0011)的反碼+1,正是補碼的定義

# 等價於 0101 + 1101 # 所以從這裡可以得到 -3 = 1101

# 即 `-3` 在計算機中的二進位制表示為 `1101`,正是「 -3 的正值 3(`0011`)的補碼(`1101`)」。

# 最後一步 0101 + 1101 等於 10010

因為我們的計算機是4位的,第一位「溢位」了,所以我們只儲存了4,即0010,而當計算機去讀取時這正是我們所期望的2!!嘆為觀止吧,天才般的設計!感恩伏羲萊布尼茲馮諾依曼

一陰一陽之謂道。萬事萬物,陰陽轉化,周而復始,無始無終,迴圈往復。

負數為什麼用補碼表示

問 負數在計算機中如何表示?舉例來說,8在計算機中表示為二進位制的1000,那麼 8怎麼表示呢?很容易想到,可以將乙個二進位制位 bit 專門規定為符號位,它等於0時就表示正數,等於1時就表示負數。比如,在8位機中,規定每個位元組的最高位為符號位。那麼,8就是00001000,而 8則是100010...

補碼原理 負數為什麼要用補碼表示

我們都知道負數在計算機中是以補碼 忘了補碼定義的戳這裡 表示的,那為什麼呢?本文嘗試了解補碼的原理,而要想理解它,首先得理解算術中 模 的概念。所以首先看一下什麼是模,然後通過乙個小例子來理解補碼。1.1 什麼是模數 in mathematics,modular arithmetic is a sy...

補碼原理 負數為什麼要用補碼表示

我們都知道負數在計算機中是以補碼 忘了補碼定義的戳這裡 表示的,那為什麼呢?本文嘗試了解補碼的原理,而要想理解它,首先得理解算術中 模 的概念。所以首先看一下什麼是模,然後通過乙個小例子來理解補碼。1.1 什麼是模數in mathematics,modular arithmetic is a sys...