找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4131|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

二進(jìn)制補(bǔ)碼就是這么回事

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:74985 發(fā)表于 2015-3-21 03:01 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
以下內(nèi)容轉(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é)長(zhǎng)的無符號(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ù)。那么我們就可以憑自己,而不是看教材,就可以推測(cè)出計(jì)算補(bǔ)碼的公式,就是:256-欲求的負(fù)數(shù)的絕對(duì)值= 此負(fù)數(shù)的補(bǔ)碼。
            
    沒錯(cuò),就是這么簡(jiǎn)單的東西,可是卻困擾了很多人�?梢娪袀€(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=1 0000 0000 =1111 1111+1,而 1111 1111減任何二進(jìn)制數(shù)的結(jié)果就是把這個(gè)數(shù)取反,那么 256 - 某二進(jìn)制數(shù)A 既是:將 A取反 +1
            
以上:完畢!
            
注:所有討論均在字節(jié)長(zhǎng)范圍內(nèi)(8bit) 進(jìn)行

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:656070 發(fā)表于 2019-12-10 11:31 | 只看該作者
學(xué)習(xí)了,不錯(cuò)不錯(cuò),有見解
回復(fù)

使用道具 舉報(bào)

板凳
ID:97023 發(fā)表于 2020-2-21 18:25 | 只看該作者
受教了,謝謝,不過這一段可能打字出錯(cuò)了:
“由上,我們了解,其實(shí)補(bǔ)碼不過是用128 ~ 255 這段范圍的數(shù)來表示 ~128 ~ -1這段范圍的負(fù)數(shù)。那么我們就可以憑自己,而不是看教材,就可以推測(cè)出計(jì)算補(bǔ)碼的公式,就是:256-欲求的負(fù)數(shù)的絕對(duì)值= 此負(fù)數(shù)的補(bǔ)碼。”
其中:“~128 ~ -1這段范圍的負(fù)數(shù)�!�
是否應(yīng)該為:“-128 ~ -1這段范圍的負(fù)數(shù)�!�
第一個(gè)符號(hào)應(yīng)該是:“-”
如有不當(dāng),請(qǐng)忽略。
回復(fù)

使用道具 舉報(bào)

地板
ID:149799 發(fā)表于 2020-2-21 21:30 | 只看該作者
是不是總數(shù)0~255,以正負(fù)127的中點(diǎn),即128點(diǎn)作為0點(diǎn),把129作為+1,把127作為-1。把總數(shù)的0點(diǎn)作為-127點(diǎn),是不是這個(gè)意思,望大師解答。
回復(fù)

使用道具 舉報(bào)

5#
ID:562994 發(fā)表于 2020-2-24 03:04 來自觸屏版 | 只看該作者
終于明白了,謝謝。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表