原碼 反碼 補碼詳述

2021-10-09 19:04:00 字數 2086 閱讀 4245

**背景:**如何讓計算機執行二進位制的(+、-)運算,人腦基於常識(規則)可以識別(+、-)符號,然後運算出結果,那如何讓計算機基於規則,運算出符合人們常識的結果呢

一開始,人們約定在乙個二進位制數前用第一位(最高位)來表示符號,即1表示負,0表示正,這就是最初「原碼」的概念(這就是概念)

號外:為啥叫32位作業系統:計算機可以一次處理2^32個數字(0、1)

# 以8位為例

0 0000001 =

> 0 0000001

-1 =

> 1 0000001

如何計算 1-1

0 0000001 + 1 0000001 = 1 0000010 (-2)
為啥是加號,人看著是減號運算。因為計算機的硬體結構中只有加法器,因此所有的運算均需轉換為加法運算(二進位制運算規則請自查)

在原碼中0有+0和-0兩種表示形式,存在二義性。

為了避免在運算時,符號為單獨處理,不知道哪個聰明大師想出了乙個規則,該規則人們命名成了補碼(這也是概念,理解了規則,也就理解了補碼)

規則如下:

正數的補碼和原碼相同;負數的補碼通過先把除符號位外其他各位取反,再在末位(最低位)加1得到

# 以8位為例

0 0000001 =

> 0 0000001

1 0000001 =

> 1 1111110 + 1 =

> 1 1111111

1 - 1 =

> 0 0000001 + 1 1111111 =

> 0 0000000 =

> 0(人認可的)

疑問:加法運算後,應該是9個數字 10 0000000,為啥是0 0000000。個人理解,我的計算機是8位作業系統,只能處理8位,多餘的1,高位溢位(請知曉的大佬講解一下)

聰明人想出補碼的理論依據:

模:乙個計算機運算的概念。乙個計量單位稱(或者理解為計算規則)

時鐘是以十二進位制進行計數迴圈的,即以12為模。在時鐘上,時針加上(正撥)12的整數倍或減去(反撥)12的整數倍,時針的位置不變。

例如,從0點出發逆時針撥10格即減去10小時,也可看成從0點出發順時針撥2格(加上2小時),即2點(0-10=-10=-10+12=2)。因此,在模12的前提下,-10可對映為+2。

由此可見,對於乙個模數為12的迴圈系統來說,減10和加2的效果是一樣的。所以,在以12為模的系統中,凡是減10的運算都可以用加2來代替,這樣就把減法問題轉化成加法問題了

同理,如果計算機為8位的處理系統,則當計數器計滿8位也就是256個數後會產生溢位,又從頭開始計數。顯然,8位二進位制數最大為(11111111=2^7 +…+20=28),即256。(個人理解,先取反,相當於鐘錶反轉;再加1,相當於加二進位制[0,1]的最大數字)

通過對補碼的了解,可以看出其實「反碼」是「原碼」向「補碼」表示形式轉變過程中的乙個過渡形式。之所以當初會想到「反碼」,是因為它太容易從電路上來實現了(僅需要取反就行了)。同時存在如下問題

1 =

> 0 0000001

-1=>1 0000001 =

> 1 1111110

0 0000001+1 1111110=1 1111111 = -0

移碼是一種比較特殊的二進位制數表示形式。它的編碼規則如下:

正數的符號位為1,負數的符號位為0;

真值部分與補碼一樣。(規則就是概念,可以理解為原碼換算成補碼後,再對符號位取反)

5的二進位制移碼(假設字長為8)為10000101 ,-5的二進位制移碼為01111011(它是對-5的補碼符號取反的結果)

1 與 1

| 原碼|反碼 |補碼 | 移碼|

|--|--|--|--|

| 0 0000001 |0 0000001 |0 0000001|1 0000001|

| 1 0000001 |1 1111110 |1 1111111|0 1111111|

原碼 反碼 補碼

正數 原碼 反碼 補碼一樣 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進製 的實踐要比二或三進製計數出現的晚.摘...