微機 機器數的原碼 反碼 補碼

2022-08-25 20:03:27 字數 3665 閱讀 7406

機器數:

在機器中,用二進位制表示有符號數,用最高位表示符號,其餘的為數值位,這樣一組連同符號也編碼化的二進位制數稱為機器數。

(符號位

0為正,

1為負)

真值:機器數所代表的數值大小稱為機器數的真值(

即實際的值,有正負,例如

1000 0001的真值

為= –000 0001 = –1

,1000 0001即為機器數

)。在機器數中最高位為符號位,符號位為0

表示正數,符號位為

1表示負數

,其餘為該數的絕對值,這種表示方法 就稱為原碼。

例如:8位二進位制原碼表示數的範圍是

-127

到+127

,即-2^7-1

到2^7-1

,最高位為符號位

0的原碼有兩種表示方法,即+0和

-0,設字長為8位

【+0】原

= 0000 0000b

【-0】原

=1000 0000b

採用原碼表示法時,編碼簡單直觀,與真值轉換方便,便於人識別,但也帶來一些麻煩

一:是引起機器中零的表示不唯一,零有二義性,給機器判零帶來麻煩,必須在設計時約定好機器採用正零或負零

二:是不便於進行加減運算,用原碼進行四則運算時,符號位需單獨處理,而且原碼加減運算規則複雜。

n位二進位制原碼的表示範圍為

-(2-1)到

+(2-1)

正數的反碼與原碼相同。

負數的反碼等於原碼除符號位外,其餘各位按位取反。即符號位依舊是0正1

負,其餘的取反

例如:   

0的反碼也有兩種表示方法,即+0和

-0,設字長為8位

【+0】原

= 0000 0000b  

(與原碼相同)

【-0】原

=1111 1111b   

(符號位相同,其餘取反)

n位二進位制反碼的表示範圍為

-(2-1)到

+(2-1)

正數的補碼表示與原碼相同,即【x】補=

【x】原=

【x】反負數的補碼等於它的反碼加1

,即在其反碼的最低位加

1就為該數的補碼

例如:0的補碼只有一種就是 

0000 0000

,無論+0

或者-0

,在補碼中也應沒有

-0的概念

而原可表示-0

的1000 0000 

則表示為

-128

,則可多表示乙個數,所以位於4位

int型,

可以表示範圍是: [-231,

231-1] 

n位二進位制補碼的表示範圍為

-2到+(2

-1)也即正數以原碼儲存,負數以補碼儲存,符號位0為正1

為負,0

的儲存形式只有+0為

0000 0000

,沒有-0

,1000 0000

表示-128

,為2^(n-1)

首先對於原碼,人眼可很快根據最高位識別出乙個數的正負且進行正確的加減運算,例如乙個正數加上乙個負數,我們能很快辨別出是等於這個正數減去負數的絕對值,但對於計算機,為設計簡單,在計算機中只有加法器,沒有減法器,cpu

只會做加法

,若用2

個原碼或反碼進行相應加法則運算會發生錯誤,所以由相應的規定人為可以很輕鬆看出真值的原碼,到規定計算機原碼到補碼轉化過程中的反碼,再到最後規定了可只用加法器就能進行正確運算的補碼,

所以計算機中的所有數都是補碼形式進行儲存!(基本可以這樣認為,負數用補碼表示,正數的原碼等於補碼) 

總之採用補碼可用加法的運算代替減法運算,從而可以簡化硬體結構,降低成本!

形象的可解釋為在日常生活中,如鐘錶系統,若當前世界為10

點,我想將時間調回

8點,第一種方法是往回調即逆時針旋轉

2小時、旋轉

14小時、旋轉

26小時。。。。。

第二種方法是往前撥即順時針旋轉10

小時、旋轉

22小時、旋轉

34小時。。。。。

若順時針撥為正,逆時針為負則用數字表示即調時間方法為:

10時-2時=8

時  10

時+10

時=20時=8

時 也即 

10-2=8  10+10=8

很巧妙的將10減2

變成了加

10,因為時針是圓的,時針一圈為

12小時,上午

8點與晚上

20點在時針上的位置是一樣的,因為他們相差

12小時

,20點減去乙個週期

12小時即得到了8點

這在數學上稱其為共模同餘,其中12

稱為時針技術系統的模,也即

10-2=10+10

(mod 12

)  計算機也正是用這以數學思想,巧妙的將原來本是減法運算轉換成可進行正確的加法運算

也就是說假設是在當模為12

時,我們需要計算機進行

10-2

的運算,計算機將

10存為補碼10,

-2存為補碼

10,然後進行相加,所得的結果為

20,由於超過了位碼,捨去了計數器的乙個最高位也即模的大小,即

12,剩下位數為8,

8依舊為補碼,再轉換成原碼輸出給我們,為8(

不過計算機採用的模不是12

,而是2

!)對於字長為n

位的二進位制計數系統,某乙個數x,

其絕對值小於模數|x|<2

,補碼定義如下:

【x】補

=2+x

若x為正數,即0《

x<2

-1,則【x】補

=2+x=x,因為計數器加上

2,超過位數,自然丟失這一位,等於沒加,見後例

若x為負數,即

-2《x《0

,則【x

】補=2

+x=2

-|x|,即該數補碼為模減去該負數的絕對值(這也形象說明計算機採用的是共模同餘的這種數學思想,雖然計算機無法進行

2-|x|這種減法運算,不過計算機能夠判斷符號位是0還是

1,以及將1變成

0,0變成

1,也能進行加

1操作,進行這些操作也即是負數的補碼是等於它的反碼加1)

通過這樣定義的補碼儲存在計算機當中,當進行運算時若有超過模的部分位數會被自然丟失,剩下位數所得結果再轉換成相應的原碼即為正確運算結果

例:計算64-10=

?在字長為8

為的二進位制計數器系統中

64的補碼為: 

0 100 0000b

-10的原碼為:

1 000 1010b

-10的反碼為:

1 111 0101b

-10的補碼為:

1 111 0110b  

然後將2

數的補碼相加:

0100 0000=【

+64】補

+  1111 0110=【

-10】補

1 0011 0110=【

+54】補

1由於為

8位系統,被自然丟失!

0011 0110

表示的補碼原碼也為

0011 0110

,即表示

+54,也與事實相符

機器數 原碼 反碼 補碼

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

機器數之原碼 反碼 補碼

前言 規定將乙個二進位制數的最高位作為符號位,用0表示正,用1表示負。機器數 在機器內部存放的正負號數碼後的數。真值 在機器外部存放的由正負號表示的數。一 原碼 表示方法 符號位 用0表示正,用1表示負。特點 數值部分與該二進位制真值的數值部分相同。注意 1 0的原碼有兩種形式,0的原碼為00000...

原碼 反碼 補碼

正數 原碼 反碼 補碼一樣 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 當...