1. 程式人生 > >二進制中的原碼反碼補碼

二進制中的原碼反碼補碼

log 結果 範圍 點擊 -- 計算機 絕對值 無法 數值

二進制中的原碼、反碼、補碼

1. 原碼

原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其余位表示值. 比如如果是8位二進制:

[+1] = 0000 0001

[-1] = 1000 0001

第一位是符號位. 因為第一位是符號位, 所以8位二進制數的取值範圍就是:

[1111 1111 , 0111 1111]

[-127 , 127]

原碼是人腦最容易理解和計算的表示方式.

2. 反碼

反碼的表示方法是:

正數的反碼是其本身

負數的反碼是在其原碼的基礎上, 符號位不變,其余各個位取反.

[+1] = [00000001] = [00000001]

[-1] = [10000001] = [11111110]

可見如果一個反碼表示的是負數, 人腦無法直觀的看出來它的數值. 通常要將其轉換成原碼再計算.

3. 補碼

補碼的表示方法是:

正數的補碼就是其本身

負數的補碼是在其原碼的基礎上, 符號位不變, 其余各位取反, 最後+1. (即在反碼的基礎上+1)

[+1] = [00000001] = [00000001] = [00000001]

[-1] = [10000001] = [11111110] = [11111111]

對於負數, 補碼表示方式也是人腦無法直觀看出其數值的. 通常也需要轉換成原碼在計算其數值.

對於有符號數而言:

(1)二進制的最高位是符號位:0表示正數,1表示負數

(2)正數的原碼、反碼、補碼都一樣;

(3)負數的反碼 = 它的原碼符號位不變,其他位取反(0 ->1 ; 1->0 );

(4)負數的補碼 = 它的反碼 +1;

(5)0的反碼、補碼都是0;

(6)在計算機運算的時候,都是以補碼的方式來運算的;

例子:

下面我們就使用“有符號數”來模擬一下,在計算機中是怎樣運算的。

(1)正數相加:

例如:1+1 ,在計算機中運算如下:

1的原碼為:

00000000 00000000 00000000 00000001

因為“正數的原碼、反碼、補碼都一樣”,所以,1的補碼 = 1的原碼,所以 1的補碼+ 1的補碼 就等於:

00000000 00000000 00000000 00000001

+

00000000 00000000 00000000 00000001

=

00000000 00000000 00000000 00000010

00000000 00000000 00000000 00000010( 轉換為10進制) = 0*2^0 + 1*2^1 = 0 + 2 =2

(2)正數相減:

例如:1-2,在計算機中運算如下:

在計算機中減運算其實是作為加運算來操作的,所以,1-2 = 1 + ( -2 )

第一步:把 1補碼找出來(因為正數的原碼、反碼、補碼都一樣,所以我們可通過原碼直接獲取補碼):

1的補碼:

00000000 00000000 00000000 00000001

第二步:把-2的原碼找出來:

-2的原碼:

10000000 00000000 00000000 00000010

第三步:把-2的反碼找出來:

-2的反碼:

11111111 11111111 11111111 11111101

第三步:把-2的補碼找出來:

-2的補碼:

11111111 11111111 11111111 11111110

第四步:1的補碼與-2的補碼相加:

00000000 00000000 00000000 00000001

+

11111111 11111111 11111111 11111110

=

11111111 11111111 11111111 11111111

第五步:將計算結果的補碼轉換為原碼,反其道而行之即可(如果想將二進制轉換為十進制,必須得到二進制的原碼)

補碼:11111111 11111111 11111111 11111111

=

反碼:11111111 11111111 11111111 11111110

=

原碼:10000000 00000000 00000000 00000001

第六步:將計算結果的二進制原碼 轉換 為十進制

二進制原碼:10000000 00000000 00000000 00000001 = 1*2^0 = -1

--------------------- 本文來自 realnewdream 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/dabing69221/article/details/17333743?utm_source=copy

二進制中的原碼反碼補碼