日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

补码到底是个什么东西

發(fā)布時(shí)間:2024/8/23 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 补码到底是个什么东西 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

概述

先引入一個(gè)前提,在計(jì)算機(jī)中數(shù)字是以二進(jìn)制進(jìn)行存儲(chǔ)的,也就是我們看到的2,在計(jì)算機(jī)中存儲(chǔ)的是10。我們進(jìn)行的加法運(yùn)算 2+1=3 在計(jì)算機(jī)中是這樣的(這里先假設(shè)計(jì)算機(jī)存儲(chǔ)的是4位二進(jìn)制數(shù)字) 0010+0001=0011

很容以看的出來(lái),4為二進(jìn)制數(shù)能表示的最大數(shù)字是1111,就像兩位十進(jìn)制數(shù)表示的最大數(shù)字是99一樣。那如果在進(jìn)行加法運(yùn)算時(shí),結(jié)果超出存儲(chǔ)的容量怎么辦?比如:9+9=18 二進(jìn)制表示為:1001+1001=10010,但是,因?yàn)橹荒艽鎯?chǔ)4位數(shù)的原因,最高位丟了,結(jié)果變成了 0010,也就是2,這時(shí)是發(fā)生了溢出的。在做運(yùn)算時(shí)要避免數(shù)值發(fā)生溢出(當(dāng)然,現(xiàn)在計(jì)算機(jī)存儲(chǔ)的數(shù)字為64位,日常使用完全不用擔(dān)心)

運(yùn)算不光有加法,還有減乘除。乘法就是多次加法,除法就是多次減法。那么減法如何實(shí)現(xiàn)呢?在剛開始的時(shí)候,計(jì)算機(jī)只能進(jìn)行加法運(yùn)算,這時(shí)一部分人想辦法讓其能夠直接進(jìn)行減法計(jì)算,而另一部分人想通過加法來(lái)實(shí)現(xiàn)減法,最終后者先給出了解決方案。(只是我臆想的情景)

通過加法來(lái)實(shí)現(xiàn)減法

還記得上面提到的,四位二進(jìn)制數(shù)表示的最大數(shù)字為15,當(dāng)發(fā)生溢出時(shí):

16=>二進(jìn)制:10000 => 0

17=>二進(jìn)制:10001 => 1

顯然,去掉最高位等于減去16

那么能不能利用加法溢出來(lái)實(shí)現(xiàn)減法呢?下面簡(jiǎn)單推倒一下:

9-2=7 若要實(shí)現(xiàn) 9+x=7 那么利用溢出的原理,就要實(shí)現(xiàn) 9+x=7+16=23 簡(jiǎn)單的解一下方程 x=23-9=14 , 很好,來(lái)驗(yàn)證一下:

9+14 的二進(jìn)制表示為:1001+1110=10111 最高位溢出,結(jié)果為:0111 也就是7,完美。

下面問題來(lái)了:如何將上邊的2轉(zhuǎn)成14呢?也就是講二進(jìn)制的0010轉(zhuǎn)成1110。他們有什么關(guān)系呢?

偉大的數(shù)學(xué)科學(xué)家前輩們總結(jié)出了規(guī)律。并發(fā)明了反碼和補(bǔ)碼的概念。補(bǔ)碼就是上面轉(zhuǎn)換后的14。

原碼=>按位取反=>反碼

反碼=>加1=>補(bǔ)碼

雖然不知道這個(gè)規(guī)律是如何找出來(lái)的,但經(jīng)過無(wú)數(shù)次驗(yàn)證,確實(shí)是這樣。

引入負(fù)數(shù)

當(dāng)引入了負(fù)數(shù)的概念時(shí),為了表示正負(fù),規(guī)定第一位為符號(hào)位(0為正,1為負(fù)),因?yàn)橐敕?hào)位,原來(lái)的4位數(shù),能表示的最大值也變成了0111。

因?yàn)樨?fù)數(shù)的引入,現(xiàn)在所有的減法都可以當(dāng)做加法來(lái)實(shí)現(xiàn)了,9-2=9+(-2),或者說9+(-2)=9-2。計(jì)算仍然是通過補(bǔ)碼來(lái)實(shí)現(xiàn)。

負(fù)數(shù)的補(bǔ)碼為:符號(hào)位不變按位取反,再加1

正數(shù)的補(bǔ)碼為:它本身

負(fù)數(shù)的補(bǔ)碼很好理解,就是上面總結(jié)的規(guī)律,利用加法來(lái)實(shí)現(xiàn)減法。正數(shù)的補(bǔ)碼為啥是它本身呢?你看剛才分析的減法,只有被減數(shù)進(jìn)行了轉(zhuǎn)換,減數(shù)沒變吧。很好理解。其實(shí)也是為了可以統(tǒng)一進(jìn)行處理,引入補(bǔ)碼后,正負(fù)數(shù)可以使用一套加減法規(guī)則進(jìn)行計(jì)算。

簡(jiǎn)單實(shí)驗(yàn)一下:

2+(-4)=-2

-4 => 二進(jìn)制表示:1100 => 補(bǔ)碼:1100

2 => 二進(jìn)制表示:0010 => 補(bǔ)碼:0010

1100+0010=1110(補(bǔ)碼)

將計(jì)算結(jié)果再轉(zhuǎn)成原碼 1010,-2沒毛病

然后,有一個(gè)尷尬的問題,正數(shù)的0為: 0000,負(fù)數(shù)的0為:1000,同一個(gè)數(shù)字,但是換成補(bǔ)碼后,你會(huì)發(fā)現(xiàn)是同一個(gè)數(shù)字: 0000。


總結(jié)一下:利用補(bǔ)碼計(jì)算,就是通過加法來(lái)實(shí)現(xiàn)減法運(yùn)算,是利用了計(jì)算機(jī)存儲(chǔ)位數(shù)有限,超出發(fā)生溢出并丟失最高位的特性。

不知道補(bǔ)碼是哪位偉大的科學(xué)家發(fā)明的,前人栽樹后人乘涼,膜拜。

總結(jié)

以上是生活随笔為你收集整理的补码到底是个什么东西的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。