【计算机原理篇】原码、反码和补码
注意:計(jì)算機(jī)實(shí)際上是按照補(bǔ)碼進(jìn)行存儲(chǔ)的,對(duì)計(jì)算機(jī)來說沒有原碼和反碼這種東西,原碼和反碼只是為了我們方便計(jì)算補(bǔ)碼而定義的一種概念。
一、原碼
正數(shù)的原碼就是它本身,負(fù)數(shù)的原碼最高位為1。
如果用一個(gè)字節(jié)來存儲(chǔ)整數(shù),那么20的原碼就是0001 0100,-20的原碼就是1001 0100
二、反碼
正數(shù)的反碼跟原碼一樣,負(fù)數(shù)的反碼按位取反,符號(hào)位不變。
如果用一個(gè)字節(jié)來存儲(chǔ)整數(shù),那么20的反碼就是0001 0100,-20的反碼就是1110 1011
三、補(bǔ)碼
正數(shù)的補(bǔ)碼跟原碼一樣,負(fù)數(shù)的補(bǔ)碼是反碼加1。
如果用一個(gè)字節(jié)來存儲(chǔ)整數(shù),那么20的補(bǔ)碼就是0001 0100,-20的補(bǔ)碼就是1110 1100
四、計(jì)算機(jī)為什么不用原碼和反碼,用的補(bǔ)碼
原因是使用原碼或者反碼計(jì)算結(jié)果是錯(cuò)誤的,補(bǔ)碼才是正確的。
下面我們來看一下20+(-20),三種情況下計(jì)算的結(jié)果
1、原碼計(jì)算
? ?0001 0100(20)
+?1001 0100(-20)
-------------------------------
? ? 10101000(-40)
20和-20的和是-40,結(jié)果顯然不對(duì)
2、反碼計(jì)算
? ?0001 0100(20)
+?1111 0101(-10)
--------------------------------
? ? 0000?1001(9)
20和-10的和是9,結(jié)果顯然不對(duì)
3、補(bǔ)碼計(jì)算
? ?0001 0100(20)
+?1110 1100(-20)
-------------------------------
? ? 0000 0000(0)
用反碼計(jì)算的結(jié)果正確
五、為什么一個(gè)字節(jié)能表示的整數(shù)范圍是-128到-127
首先最高位為0,其他位為1,就代表最大的整數(shù),就是0111 1111(127),那么最小的數(shù)應(yīng)該是1000 0001(-127)
那么問題來了,一個(gè)字節(jié)如何表示-128?
我們結(jié)合上面的原碼、反碼和補(bǔ)碼知識(shí)知道,我們知道1000 0000(-0)+0111 1111(+127)=1111 1111(-1)。這種情況下我們發(fā)現(xiàn)補(bǔ)碼的計(jì)算也不準(zhǔn)了,-0與127的和居然是-1。剛剛不是還說用補(bǔ)碼計(jì)算時(shí)正確的嗎?
為了解決這種特殊情況,我們認(rèn)為反碼1000 0000表示的是-128,不再表示-0(-0本身也沒有意義,用0就可以了),然后1000 0000(-128)+0111 1111(+127)=1111 1111(-1),漂亮,所有情況下,補(bǔ)碼的計(jì)算都是正確的了。
?
總結(jié)
以上是生活随笔為你收集整理的【计算机原理篇】原码、反码和补码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 山东临沂正阳路取名原因
- 下一篇: acdsee扫描没有图像_详解CT图像常