計算機基礎知識——原碼、反碼、補碼

(一)前言

在計算機內,定點數有3種表示法:原碼、反碼和補碼。反碼是數值存儲的一種,但是由於補碼更能有效表現數字在計算機中的形式,所以多數計算機一般都不採用反碼錶示數。
在數值數據中分爲有符號數與無符號數,其中,有符號數的最高位爲符號位,最高位爲“0”代表正數,最高位爲"1"表示負數。因此對於一個單字節的二進制數而言,有符號數所表示的數值範圍爲:-127 (11111111) ~ +127 (00000000) ;無符號數的表示範圍爲:0 ~ 255 [00000000 ~ 11111111]。

(二)原碼、反碼、補碼

(1)概念

原碼:最高位爲符號位,0代表正數,1代表負數;有符號數除符號位外均爲該數的模。
反碼:正數的反碼與其原碼一致,而負數的反碼爲除符號位外全部按位取反。
補碼:正數的補碼與其原碼一致,而負數的補碼爲其反碼加1.

(2)示例(取單字節位)

在這裏插入圖片描述

(三)計算機用補碼存儲數據的緣由

首先,在計算機中進行加減乘除的算術運算時,計算機都是通過加法和位移運算所實現的。而若是用反碼來進行存儲數據的話或出現一些問題,具體可以看一下示例:
以減法爲例:假設我們要計算5-5,由上述可知,在計算機中實際的操作爲5 +(-5)。
當數據用反碼存儲時,此時5 -5 計算過程即爲:00000101 + 11111010=11111111,轉換爲原碼即爲-0(10000000);此時就存在這麼一個問題,即在計算機中存在+0(00000000)與-0(11111111)兩種表示0的二進制數。
而用補碼計算時:5-5 = 00000101 + 11111011 = 100000000,可知結果超出了8位,保留後8位,結果即爲00000000。
綜上的,計算機一般採用補碼進行數據存儲。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章