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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

为什么-1的补码是全1(11111111)?-128的补码是10000000?

發(fā)布時(shí)間:2025/4/5 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么-1的补码是全1(11111111)?-128的补码是10000000? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先需要知道:二進(jìn)制補(bǔ)碼表示的正數(shù)實(shí)際上左側(cè)有無限多個(gè)0,而負(fù)數(shù)有無限多個(gè)1.只是為了適應(yīng)硬件的寬度,二進(jìn)制表示的數(shù)的前導(dǎo)位被隱藏了。

舉例

下面看一下64位的 ?4ten-4_{ten}?4ten?的補(bǔ)碼(以64位機(jī)器(機(jī)器里面存的是補(bǔ)碼)為例):

00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100two=[4]補(bǔ)00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100_{two}=[4]_{補(bǔ)}00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100two?=[4]補(bǔ)?
11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111100two=[?4]補(bǔ)11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111100_{two}=[-4]_{補(bǔ)}11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111100two?=[?4]補(bǔ)?
下標(biāo)two表示二進(jìn)制,下標(biāo)ten表示十進(jìn)制。

我們把[?4]補(bǔ)[-4]_{補(bǔ)}[?4]補(bǔ)?[4]補(bǔ)[4]_{補(bǔ)}[4]補(bǔ)?相加會(huì)得到什么呢?

[?4]補(bǔ)+[4]補(bǔ)=00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100two+11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111100two=1,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100two[-4]_{補(bǔ)}+[4]_{補(bǔ)}=00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100_{two}\\+11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111100_{two}\\=1,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100_{two} [?4]補(bǔ)?+[4]補(bǔ)?=00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100two?+11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111100two?=1,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000100two?
我們發(fā)現(xiàn) 64位補(bǔ)碼相加得到2642^{64}264!

下面求8位的 ?4ten-4_{ten}?4ten?的補(bǔ)碼

已知 有符號(hào)數(shù) ?4ten=10000100two-4_{ten}=10000100_{two}?4ten?=10000100two?,

根據(jù)口訣:負(fù)數(shù)的補(bǔ)碼=負(fù)數(shù)的原碼取反(符號(hào)位不變,數(shù)據(jù)位取反)+1
可以得到:[?4]補(bǔ)=11111011two+00000001two=11111100two[-4]_{補(bǔ)}=11111011_{two}+00000001_{two}=11111100_{two}[?4]補(bǔ)?=11111011two?+00000001two?=11111100two?,

4ten4_{ten}4ten?的補(bǔ)碼仍然是原碼,即[4]補(bǔ)=00000100two[4]_{補(bǔ)}=00000100_{two}[4]補(bǔ)?=00000100two?,

我們把[?4]補(bǔ)[-4]_{補(bǔ)}[?4]補(bǔ)?[4]補(bǔ)[4]_{補(bǔ)}[4]補(bǔ)?相加會(huì)得到什么呢?

[?4]補(bǔ)+[4]補(bǔ)=11111100two+00000100two=1,00000000[-4]_{補(bǔ)}+[4]_{補(bǔ)}=11111100_{two}+00000100_{two}=1,00000000[?4]補(bǔ)?+[4]補(bǔ)?=11111100two?+00000100two?=1,00000000

我們發(fā)現(xiàn) 8位補(bǔ)碼相加得到282^{8}28!

歸納

二進(jìn)制補(bǔ)碼得名于下述規(guī)則:一個(gè)n位的數(shù)與其n位的相反數(shù)做無符號(hào)加法,結(jié)果為2n2^n2n,因此,x的相反數(shù)(或相補(bǔ)數(shù))-x 等于2n?x2^n-x2n?x,或叫“二進(jìn)制補(bǔ)碼”。

以n=8位為例,1的二進(jìn)制表示為00000001,則 -1的二進(jìn)制補(bǔ)碼可以由上面的公式寫出來
[?1]補(bǔ)=2n?1=28?1=1,00000000?00000001=11111112?00000001=11111111[-1]_補(bǔ)=2^n-1=2^8-1=1,00000000-00000001=11111112-00000001=11111111[?1]補(bǔ)?=2n?1=28?1=1,00000000?00000001=11111112?00000001=11111111
注:這里11111112僅僅是方便計(jì)算,實(shí)際二進(jìn)制中逢二進(jìn)一,還是100000000.

同樣的,我們來看-128的情況。

對(duì)于128ten=27=10000000128_{ten}=2^7=10000000128ten?=27=10000000 ,這里的n=8,根據(jù)補(bǔ)碼的定義:

[?128]補(bǔ)=28?128=1,00000000?10000000=11111112?10000000=10000000[-128]_{補(bǔ)}=2^8-128=1,00000000-10000000=11111112-10000000=10000000[?128]補(bǔ)?=28?128=1,00000000?10000000=11111112?10000000=10000000

綜上,求1個(gè)負(fù)數(shù)(-x)的補(bǔ)碼,只需要用2n?x2^n-x2n?x即可,這里的n表示這個(gè)負(fù)數(shù)的二進(jìn)制位數(shù)。注意這里x是正數(shù)

后記:這個(gè)問題在《計(jì)算機(jī)組成與設(shè)計(jì)-硬件/軟件接口》一書中有詳細(xì)的解釋。

總結(jié)

以上是生活随笔為你收集整理的为什么-1的补码是全1(11111111)?-128的补码是10000000?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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