原碼、反碼與補碼及其意義
(1)數值資料的表示
我們把乙個數在計算機內被表示的二進位制形式稱為機器數,該數稱為這個機器數的真值。機器數有固定的位數,具體是多少位與機器有關,通常是8位或16位。機器數把真值的符號數位化,通常用最高位表示符號,0表示正,1表示負。例如,假設機器數為8位,最高位是符號位,那麼在定點整數的情況下,00101110和10010011的真值分別為十進位制數+46和-19。
(2)原碼:
乙個整數的原碼是指:符號位用0或1表示,0表示正,1表示負,數值部分就是該整數的絕對值的二進位制表示。
例如:假設機器數的位數是8,那麼:[+17]原=00010001 [-39]原=10100111
值得注意的是,由於所以數0的原碼不唯一,有「正零」和「負零」之分。
(2)反碼
在反碼的表示中,正數的表示方法與原碼相同;負數的反碼是把其原碼除符號位以外的各位取反(即0變1,1變0)。通常,用[x]反表示x的反碼。例如:
[+45]反 = [+45]原 = 00101101
[-32]原 = 10100000
[-32]反 = 11011111
(3)補碼
在補碼的表示中,正數的表示方法與原碼相同;負數的補碼在其反碼的最低有效位上加1。通常用[x]補表示x的補碼。例如:
[+14]補 = 10100100
[-36]反 = 11011011
[-36]補 = 11011100
注意:數0的補碼的表示是唯一的,即[0]補=[+0]補=[-0]補=00000000
現在我們來看看引進原碼、反碼與補碼這幾個概念到底有什麼意義。先看下面的例子。例如:x = 52,y = 38,求x – y的值。
[x]補 = 00110100
[-y]原 = 10100110
[-y]反 = 11011001
[-y]補 = 11011010
現在我們看看[x]補 + [-y]補 等於多少?
[52]補: 0 0 1 1 0 1 0 0
[-38]補:+) 1 1 0 1 1 0 1 0
1 0 0 0 0 1 1 1 0
自然丟失
我們可以看到,最高位丟失後,結果(14)正是52-38的值。從這裡我們不難體會到通過補碼可以把減法運算變成加法運算來做。這樣做有什麼意義呢?實事求是地說,引入補碼意義非同尋常,可以說是先輩們智慧型的結晶。因為,通過補碼運算,可以把減法運算變成加法運算;而乘法可以用加法來做,除法可以轉變成減法。這樣一來,加、減、乘、除四種運算「九九歸一」了。這對簡化cpu的設計非常有意義,cpu裡面只要有乙個加法器就可以做算術運算了。
原碼 反碼與補碼及其意義
原碼 反碼與補碼及其意義 1 數值資料的表示 我們把乙個數在計算機內被表示的二進位制形式稱為機器數,該數稱為這個機器數的真值。機器數有固定的位數,具體是多少位與機器有關,通常是8位或16位。機器數把真值的符號數位化,通常用最高位表示符號,0表示正,1表示負。例如,假設機器數為8位,最高位是符號位,那...
原碼 反碼與補碼
在計算機內,定點數有3種表示法 原碼 反碼和 補碼。所謂原碼就是 二進位制定點表示法,即最高位為符號位,0 表示正,1 表示負,其餘位表示數值的大小。反碼表示法規定 正數的反碼與其原碼相同 負數的反碼是對其原碼逐位取反,但符號位除外。補碼表示法規定 正數的補碼與其原碼相同 負數的補碼是在其反碼的末位...
補碼 原碼與反碼
古人說得好 溫故而知新 可惜現在都忙於 知新 沒有太多的時間去回顧原來的知識了。直到今天,遇到了實際問題,才突然感覺到原來很多東西在記憶中已經非常模糊,記不清了。溫故 系列主要是以的文章 觀點為主,也就是說多數將會是轉貼文章,因為這些基礎知識總會得到專家關注的,而且專家的解釋也會比我清楚得多。原碼 ...