1. 程式人生 > >計算機中數值型資料二進位制形式儲存過程中的原碼,反碼與補碼

計算機中數值型資料二進位制形式儲存過程中的原碼,反碼與補碼

在計算機系統中,數值一律用補碼來表示和儲存。原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。此外,補碼與原碼相互轉換,其運算過程是相同的,不需要額外的硬體電路。

舉個例子快速掌握吧

給一個數求補碼

1、正整數的補碼是其二進位制表示,與原碼相同

+9的補碼是00001001,二進位制表示也是00001001,原碼:00001001

2、求負整數的補碼,將其對應的二進位制表示除了符號位的所有位取反後加1

-5的補碼。-5是負數,符號位是1,則對應-5的二進位制表示也是原碼(10000101)符號位不變,其餘位取反加1(11111011)。所以-5的補碼是11111011。為,原碼(true form)

是一種計算機中對數字的二進位制定點表示方法。原碼錶示法在數值前面增加了一位符號位(即最高位為符號位):正數該位為0,負數該位為10有兩種表示:+0-0),其餘位表示數值的大小。-5的原碼即是其二進位制表示。+11的原碼為00001011-11的原碼就是10001011

補碼求原碼

已知一個數的補碼,求原碼的操作其實就是對該補碼再求補碼:

1如果補碼的符號位為“0”,其原碼就是補碼。

2如果補碼的符號位為“1”,符號位不變,其餘位取反加1,那麼求這個補碼的補碼就是要求的原碼。

e.g.已知一個補碼為11111001,則原碼是10000111-7)。

因為符號位為“1”,表示是一個負數,所以該位不變,仍為“1”

其餘七位1111001

取反後為0000110;(注:反碼的概念就是符號位不變,其餘位取反就是反碼)

再加1,所以是10000111

已知補碼求表示的數值

e.g.-65的補碼是10111111

若直接將10111111轉換成十進位制,發現結果並不是-65,而是191

事實上,在計算機內,如果是一個二進位制數,其最左邊的位是1,則我們可以判定它為負數,並且是用補碼錶示。

若要得到一個負二進位制補碼的數值,只需求對應的二進位制表示即可,即只需求原碼即可,只要對除符號位的其餘位取反加1,就可算出其餘位所表示的十進位制數,將符號位變為負號-,加在這個十進位制數前面即獲得此數。

如:二進位制值:10111111-65的補碼)

除符號位其餘位取反:1

1000000

111000001-65

+0與-0

首先正數的反碼補碼與原碼相同

+0的原碼:00000000

+0的反碼:00000000

+0的補碼:00000000

-0的原碼:10000000

-0的反碼:11111111(後面分析-0無反碼)

-0的補碼:00000000(補碼規定0沒有正負之分)

-128的原碼:10000000

-128的反碼:11111111

-128的補碼:10000000

-0與-128有相同的反碼,為減少歧義,-0沒有反碼。

綜上所述:1.-128的補碼和原碼一樣都是1000 0000,
          2.0的原碼、反碼和補碼都一樣(即0000 0000)
          3.如果把-0當做負數,1000 0000就會有歧義(事實上0的補碼只有一個0000 0000)

補碼的範圍是[-2^(n-1),2^(n-1)-1]