原碼反碼補(bǔ)碼
發(fā)布時(shí)間:2025-11-27 | 來源:互聯(lián)網(wǎng)轉(zhuǎn)載和整理
說到二進(jìn)制補(bǔ)碼,大家都知道:有符號(hào)數(shù)的負(fù)數(shù)的補(bǔ)碼是其正數(shù)的反碼+1,例如10001111的補(bǔ)碼是反碼01110000加1=01110001,很多書都這么說,可是為什么這樣計(jì)算的結(jié)果就是它的補(bǔ)碼?為什么要用補(bǔ)碼?很多書要么不解釋,要么就是說:這是因?yàn)樵谟?jì)算機(jī)內(nèi)補(bǔ)碼計(jì)算最快。(其實(shí)是補(bǔ)碼計(jì)算指令的CPU設(shè)計(jì)更容易實(shí)現(xiàn))最初我看的書,《大學(xué)計(jì)算機(jī)基礎(chǔ)教程》(我非計(jì)算機(jī)專業(yè)),這破書說不清,道不明,給與我非常嚴(yán)重負(fù)面的影響,以至于我在以后的計(jì)算機(jī)學(xué)習(xí)過程中,程序設(shè)計(jì)中遇到大大小小不少麻煩和迷茫。
在某些計(jì)算機(jī)組成原理書上提到:其實(shí)補(bǔ)碼的計(jì)算原理,是用一個(gè)模來減去無符號(hào)的正數(shù)部分。譬如時(shí)鐘12點(diǎn)之后是13點(diǎn),但是時(shí)鐘上沒有13點(diǎn)怎么辦?就用13減去12=1點(diǎn)。這個(gè)模是12.可惜這個(gè)比喻并不是很好。
請(qǐng)看一個(gè)字節(jié)長的無符號(hào)數(shù)的表示范圍:0~255,有符號(hào)數(shù)的表示范圍:-128~127,注意,這個(gè)表示范圍的寫法極有可能影響我們的思維,從而導(dǎo)致錯(cuò)誤。我們應(yīng)該這樣來寫:0~127~-128~-1,這才是較好的寫法。為什么?因?yàn)檫@個(gè)寫法的數(shù)的順序與0~255一一對(duì)應(yīng)。
由上我們了解,其實(shí)補(bǔ)碼不過是用128~255這段范圍的數(shù)來表示~128~-1這段范圍的負(fù)數(shù)。那么我們就可以憑自己,而不是看教材,就可以推測出計(jì)算補(bǔ)碼的公式,就是:256-欲求的負(fù)數(shù)的絕對(duì)值=此負(fù)數(shù)的補(bǔ)碼。
沒錯(cuò)就是這么簡單的東西,可是卻困擾了很多人。可見有個(gè)好的教材是多么的重要。
至于前面“負(fù)數(shù)的補(bǔ)碼是其正數(shù)的反碼+1”,極為垃圾的教材才會(huì)把這個(gè)計(jì)算方法作為初始方法來教。因?yàn)檫@個(gè)計(jì)算方法屏蔽了補(bǔ)碼的計(jì)算原理。其實(shí)這不過是“256-欲求的負(fù)數(shù)的絕對(duì)值=此負(fù)數(shù)的補(bǔ)碼”的一個(gè)比較取巧的計(jì)算方法而已。請(qǐng)看256=100000000=11111111+1,而11111111減任何二進(jìn)制數(shù)的結(jié)果就是把這個(gè)數(shù)取反,那么256-某二進(jìn)制數(shù)A既是:將A取反+1
注:所有討論均在字節(jié)長范圍內(nèi)(8bit)進(jìn)行
上一篇:世界十大恐怖片之前十名
下一篇:電腦打不開游戲怎么辦