原码、反码与补码及其意义
生活随笔
收集整理的這篇文章主要介紹了
原码、反码与补码及其意义
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原碼、反碼與補碼及其意義?
(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里面只要有一個加法器就可以做算術運算了。
總結
以上是生活随笔為你收集整理的原码、反码与补码及其意义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 货殖列传
- 下一篇: 如何加入Apache开源社区:Apach