為什么要引入補(bǔ)碼 要引入補(bǔ)碼的原因
事實(shí)上,補(bǔ)數(shù)是一個正數(shù) 。quot做運(yùn)算而不是負(fù)數(shù)。
有了補(bǔ)碼,電腦里就沒有負(fù)數(shù)了 。
所以電腦里沒有減法 。
所以只要電腦里有加法器,全世界都可以用 。
正數(shù)怎么代替負(fù)數(shù)?
當(dāng)一個數(shù)的位數(shù)有限時,計(jì)數(shù)具有周期性 。
比如規(guī)定只使用0~99兩位小數(shù),周期為10 ^ 2=100 。
此時,您可以:
25 – 1=24
25 99=(一百)24
放棄進(jìn)位只取兩位數(shù) , 那么99和-1是等價(jià)的 。
99叫做-1的補(bǔ)碼 。
公式:補(bǔ)碼=周期(10 n)負(fù)數(shù),其中n是補(bǔ)碼的位數(shù) 。
–
計(jì)算機(jī)使用二進(jìn)制,稱為:補(bǔ)碼 。
如果是8位二進(jìn)制 , 周期就是2 ^ 8=256 。
公式:補(bǔ)碼=周期(2 n)負(fù)數(shù) , 其中n是補(bǔ)碼的位數(shù) 。
–
使用補(bǔ)碼后,可以通過加法實(shí)現(xiàn)加減運(yùn)算 。
因此 , 可以簡化計(jì)算機(jī)硬件 。
這就是 介紹補(bǔ)語 。quot 。
原碼和反碼都沒有這個功能 , 所以計(jì)算機(jī)不使用它們 。
計(jì)算機(jī)中為什么用補(bǔ)碼來表示有符號數(shù)?
通過補(bǔ)碼運(yùn)算,可以根據(jù)最高位和次高位的進(jìn)位之差來判斷計(jì)算結(jié)果是否溢出 。
有符號數(shù)在計(jì)算機(jī)中有三種表示法,即原碼、補(bǔ)碼和補(bǔ)碼 。
這三種表示有兩部分:符號位和數(shù)字位 。符號位是 積極 用0和 消極 具有1 , 而數(shù)字位具有不同的表示 。
在計(jì)算機(jī)系統(tǒng)中,數(shù)值總是用補(bǔ)碼來表示和存儲 。原因是有了補(bǔ)碼,符號位和數(shù)值域可以統(tǒng)一處理;同時,加減法也可以統(tǒng)一處理 。
正整數(shù)的補(bǔ)碼是它的二進(jìn)制表示,和原碼一樣 。
例:9的補(bǔ)數(shù)是 。
(注:此9 補(bǔ)碼是用8位二進(jìn)制表示的,表示方式有很多種,包括16位二進(jìn)制、32位二進(jìn)制和64位二進(jìn)制 。每個補(bǔ)碼表示只能表示有限的數(shù) 。)
負(fù)面解讀:
求負(fù)整數(shù)的補(bǔ)碼 , 將其原碼除符號位外的所有位取反后加1(0變1,1變0,符號位不變) 。
同一個數(shù)在不同的補(bǔ)碼表示中是不同的 。例如-15的補(bǔ)碼在8位二進(jìn)制中是,但在16位二進(jìn)制補(bǔ)碼表示中是01 。以下全部用8位二進(jìn)制表示 。
為何要用補(bǔ)碼?
在計(jì)算機(jī)系統(tǒng)中,數(shù)據(jù)總是用補(bǔ)碼來表示和存儲 。
原因是有了補(bǔ)碼,加減就可以統(tǒng)一了 。
補(bǔ)碼就是補(bǔ)碼,與原碼的補(bǔ)碼無關(guān) 。
你可以 不理解 為什么要用補(bǔ)語?。
–
補(bǔ)語實(shí)際上是a 正數(shù)代替負(fù)數(shù)運(yùn)算 。quot 。
例如,十進(jìn)制運(yùn)算:
24 – 1=23
24 99=(一百)23
棄進(jìn)位,99可以代替-1 。
這時候減法就轉(zhuǎn)化為加法了 。
那么,99叫做-1的補(bǔ)數(shù) 。
丟棄進(jìn)位是一個2位數(shù)的十進(jìn)制計(jì)數(shù)周期:10 ^ 2=100 。
大家可以推導(dǎo)出求補(bǔ)數(shù)的公式:負(fù)周期 。
–
其實(shí)在三角函數(shù)中,大家都知道:
-/2和3/2,這兩個角的作用相同 。
負(fù)角和正角怎么換?
還用到公式:正角=負(fù)角周期(2) 。
–
計(jì)算機(jī)用二進(jìn)制,補(bǔ)碼,所以叫:補(bǔ)碼 。
8位二進(jìn)制的計(jì)數(shù)范圍是:0000 0000 ~ 1111 1111 。
轉(zhuǎn)換成十進(jìn)制,即:0 ~ 255 。
計(jì)數(shù)周期為2 ^ 8=256 。
那么-1的補(bǔ)碼就是255(也就是1111 1111) 。
-2的補(bǔ)碼是:-2 256=254=1111 1110 。
-128的補(bǔ)碼是:128=1000 0000 。
這是可以用八位二進(jìn)制表示的128個負(fù)數(shù) 。
求補(bǔ)數(shù)的公式還是:負(fù)句號 。
正數(shù)可以直接運(yùn)算,不需要變換 。
所以正數(shù)根本沒有補(bǔ)數(shù) 。
–
要找到補(bǔ)碼,你不要 不需要聯(lián)系 原始代碼的符號位被反轉(zhuǎn)并加。
那些亂七八糟的東西沒必要 。
外國人不擅長數(shù)學(xué),所以他們別無選擇 , 只能做這些 道路封鎖 詭計(jì) 。
為什么計(jì)算機(jī)要使用補(bǔ)碼??
【toc】開門見山,我認(rèn)為有兩個最重要的原因 。
因: 之前在網(wǎng)上查資料,查到的原因大多數(shù)都是解釋了第一點(diǎn),而且解釋的有理有據(jù)令人信服 。所以我這里先說第二點(diǎn),規(guī)則一致 , 這個是看了 深入理解計(jì)算機(jī)系統(tǒng) 的公開課學(xué)到的 。
B站深入理解計(jì)算機(jī)系統(tǒng)公開課(有中文字幕,強(qiáng)烈推薦) 順便提一嘴,研究這種問題不要用很大的數(shù)去想,就用4位數(shù)去思考反而能想的很清楚 。
假設(shè)我們有一個 只有4位的計(jì)算機(jī),計(jì)算乘法 -2 * -3 的值。如果使用原碼或者反碼進(jìn)行計(jì)算, 注意,乘法的計(jì)算規(guī)則是:直接截?cái)啾A糇畹?位 , 保留后的最高位即為符號位 。-2 的補(bǔ)碼: 1110 轉(zhuǎn)換成無符號數(shù)(十進(jìn)制) : 14 -3 的補(bǔ)碼: 1101 轉(zhuǎn)換成無符號數(shù)(十進(jìn)制) : 13 無符號數(shù) 14 * 13 = 182 將182 轉(zhuǎn)換成 二進(jìn)制 并且只保留最低 4 位: 0110 (0110的十進(jìn)制是 6, 等于正確答案) -2 的原碼: 1010 轉(zhuǎn)換成無符號數(shù)(十進(jìn)制) : 10 -3 的原碼: 1011 轉(zhuǎn)換成無符號數(shù)(十進(jìn)制) : 11 無符號數(shù) 10 * 11 = 110 將110 轉(zhuǎn)換成 二進(jìn)制 并且只保留最低 4 位: 1110 (1110的十進(jìn)制是 -6 或者 14,均不等于正確答案 6) 如果你覺得這是個巧合,那么可以自己試幾個數(shù)算一下,或者用反碼也算一下,看看是什么結(jié)果 。可以簡化硬件的計(jì)算,因?yàn)橛布褪菃渭兊碾娐钒澹刹恢朗裁捶栁唬茏龅木褪前呀邮盏降膬蓚€值做運(yùn)算 。
如果計(jì)算機(jī)使用原碼 , 那么是不是cpu需要準(zhǔn)備兩套運(yùn)算電路,運(yùn)算前還要做個 if else 判斷?一套給有符號數(shù)用,一套給無符號數(shù)用 。這樣子會造成極大的資源浪費(fèi) 。但是 如果我們使用補(bǔ)碼,就可以讓硬件無腦的計(jì)算再截?cái)嗪昧耍凑詈蟮闹挡徽撌?有符號 還是 無符號 , 都能得到正確的答案。
由于講這個的太多了,這里就簡單說一下(不寫反碼了,直接用補(bǔ)碼舉例) 。用整數(shù) 1 來做個實(shí)驗(yàn),1 的原碼是 0001,補(bǔ)碼是 0001 。-1的原碼是1001 , 補(bǔ)碼是 1111 。
如果你讓 1 和 -1 的原碼相加,那么他們很明顯不得 0 , 但是補(bǔ)碼相加溢出再截?cái)啵詈蟮扔?。至于為什么會這樣?因?yàn)檠a(bǔ)碼的定義就是這樣啊 用我自己的話總結(jié):補(bǔ)碼就等于現(xiàn)有的位再加一位,新加的位等于1,其余都為0。減去當(dāng)前的原碼,就成了補(bǔ)碼 。
用例子來說就是 10000 (總共5位) 減去 1 的原碼 0001 , 就等于 1 的補(bǔ)碼 1111。10000 – 00001 = 1111 用 -1 舉例 ,-1 的補(bǔ)碼 1111 這四位不是對應(yīng)著 8 4 2 1 嘛,那么直接把 最高位 的值 乘以 -1 , 其他位都是正值 , 加起來就行了 。
計(jì)算機(jī)中為什么用補(bǔ)碼表示數(shù)值?
在計(jì)算機(jī)系統(tǒng)中,數(shù)值,一律采用補(bǔ)碼表示和存儲 。
在計(jì)算機(jī)中,原碼和反碼,都是不存在的 。
所謂的補(bǔ)碼,實(shí)際上,是“代替負(fù)數(shù)”的正數(shù) 。
使用了補(bǔ)碼(正數(shù)),計(jì)算機(jī)中,就沒有負(fù)數(shù)了 。
同時,也就沒有減法運(yùn)算 。
由此,計(jì)算機(jī)的硬件,就能夠得以簡化 。
----------------------
正數(shù)(即補(bǔ)碼),怎么就能代替負(fù)數(shù)呢?
當(dāng)限定了參加計(jì)算的位數(shù),計(jì)數(shù),就是周期性的 。
如 2 位 10 進(jìn)制數(shù),周期就是 10^2 = 100 。
此時,-1 就能用 99 代替:
25 - 1 = 24
25 + 99 = (進(jìn)位) 24
你把進(jìn)位舍棄,只保留 2 位數(shù),這兩種算法 , 就是相同的 。
算法:代替負(fù)數(shù)的正數(shù)=負(fù)數(shù)+周期 。
-------
8 位 2 進(jìn)制數(shù),周期是: 2^8 = 256 。
-1 就可以用 255 = 1111 1111 代替 。
----------------------
使用補(bǔ)碼的目的 , 是:簡化硬件 。
算法:補(bǔ)碼=負(fù)數(shù)+2^n,n 是補(bǔ)碼的位數(shù) 。
求補(bǔ)碼 , 是很簡單的事 。
千萬別拐到“原碼反碼取反加一符號位不變”去 。
老外腦子不好用,才會弄出哪些個騷操作!
如果從“取反加一”學(xué)習(xí),必然就不理解“為什么用補(bǔ)碼” 。
因?yàn)槔贤庖膊恢溃瑸槭裁从醚a(bǔ)碼表示數(shù)值 。
【計(jì)算機(jī)中為什么用補(bǔ)碼來表示有符號數(shù)?】本文到此結(jié)束 , 希望對大家有所幫助 。
- ?京劇演員李勝素的老公是誰 她為什么叫素團(tuán)、李漂亮
- 為什么越敷面膜皮膚越不好 ?經(jīng)常貼面膜對皮膚好嗎
- 新生兒嬰兒打呼嚕是因?yàn)槭裁丛??新生兒打呼嚕是什么原因引起的
- ?袁春望為什么黑化
- 美式咖啡為什么能減肥 ?美式黑咖啡為什么可以減肥
- 為什么手機(jī)電越充越少了呢
- 糙米飯熱量比米飯更高為何還能減肥 糙米飯為什么能減肥
- 為什么iPhone7分辨率這么低
- ?蜂蜜為什么是凝固的而且是白色的
- 為什么Linux越來越受歡迎?
