原碼反碼和補(bǔ)碼(轉(zhuǎn)載)

機(jī)器數(shù)

一個(gè)數(shù)在計(jì)算機(jī)中的二進(jìn)制表示形式,叫做這個(gè)數(shù)的機(jī)器數(shù)择膝,機(jī)器數(shù)是帶符號(hào)的誓琼,在計(jì)算機(jī)中用一個(gè)數(shù)的最高位存放符號(hào),正數(shù)為0肴捉,負(fù)數(shù)為1腹侣。

比如,十進(jìn)制中的+3齿穗,假設(shè)計(jì)算機(jī)字長為8位傲隶,轉(zhuǎn)換成二進(jìn)制就是0000 0011。
如果是-3窃页,就是1000 0011.那么跺株,這里0000 0011和1000 0011就是機(jī)器數(shù)。

真值

因?yàn)榈谝晃粸榉?hào)位脖卖,所以機(jī)器數(shù)的形式值就不等于真正的數(shù)值乒省,例如上面的有符號(hào)數(shù)1000 0011,其最高位1代表負(fù)畦木,其真正數(shù)值是-3,而不是形式值131(1000 0011轉(zhuǎn)換成10進(jìn)制等于131)袖扛,所以為了區(qū)別起見,將帶符號(hào)的機(jī)器數(shù)對(duì)應(yīng)的真正數(shù)值稱為機(jī)器數(shù)的真值十籍。

例如:0000 0001的真值=+000 0001=+1,
1000 0001的真值=-000 0001=-1

原碼:

原碼就是符號(hào)位加上真值的絕對(duì)值蛆封,即用第一位表示符號(hào),其余位表示值勾栗,
比如如果是8位二進(jìn)制惨篱,[+1]原=0000 0001.[-1]原=1000 0001.因?yàn)榈谝晃皇欠?hào)位,所以8位二進(jìn)制的取值范圍就是:[1111 1111,0111 1111]即[-127,127]围俘,原碼是人腦最容易理解和計(jì)算的表示方式妒蛇。

反碼:

反碼的表示方法是:正數(shù)的反碼是其本身,負(fù)數(shù)的反碼是在其原碼的基礎(chǔ)上楷拳,符號(hào)位不變绣夺,其余各個(gè)位取反,

[+1]=[0000 0001]原= [0000 0001]反欢揖,
[-1]=[1000 0001]原=[1111 1110]反陶耍。
可見如果一個(gè)反碼表示的是負(fù)數(shù),人腦無法直觀的看出來它的數(shù)值她混,通常要將其轉(zhuǎn)換成原碼再計(jì)算烈钞。

補(bǔ)碼:

補(bǔ)碼的表示方法是:正整數(shù)的二進(jìn)制補(bǔ)碼與其二進(jìn)制原碼相同泊碑,負(fù)整數(shù)的二進(jìn)制補(bǔ)碼,先求與該負(fù)數(shù)相對(duì)應(yīng)的正整數(shù)的二進(jìn)制代碼毯欣,然后所有位取反加1馒过,不夠位數(shù)時(shí)左邊補(bǔ)1,

例如酗钞,[+1]=[0000 0001]原=[0000 0001]反=[0000 0001]補(bǔ)腹忽,
[-1]=[1000 0001]原=[1111 1110]反=[1111 1111]補(bǔ),
對(duì)于負(fù)數(shù)砚作,補(bǔ)碼表示方式也是人腦無法直觀看出其數(shù)值的窘奏,通常也需要轉(zhuǎn)換成原碼再計(jì)算其數(shù)值。

為什么要使用原碼反碼補(bǔ)碼葫录,

現(xiàn)在我們知道了計(jì)算機(jī)可以用原碼 反碼 補(bǔ)碼這三種編碼方式表示一個(gè)數(shù)着裹,對(duì)于正數(shù)因?yàn)槿N編碼方式都相同,沒有什么好解釋的米同,但是對(duì)于負(fù)數(shù)骇扇,負(fù)數(shù)的原碼反碼補(bǔ)碼是完全不同的,既然原碼才是被人腦直接識(shí)別并用于計(jì)算方式面粮,那么為什么還要用反碼和補(bǔ)碼呢匠题,首先,因?yàn)槿四X可以知道原碼的第一位是符號(hào)位但金,在計(jì)算的時(shí)候韭山,我們會(huì)根據(jù)符號(hào)位,選擇對(duì)真值區(qū)域的加減冷溃,但是對(duì)于計(jì)算機(jī)钱磅,加減乘除已經(jīng)是最基礎(chǔ)的運(yùn)算,要設(shè)計(jì)的盡量簡單似枕,計(jì)算機(jī)辨別符號(hào)位顯然會(huì)讓計(jì)算機(jī)的基礎(chǔ)電路設(shè)計(jì)變得十分復(fù)雜盖淡,于是人們想出了將符號(hào)位也參與運(yùn)算的方法。
我們知道凿歼,根據(jù)運(yùn)算法則減去一個(gè)正數(shù)等于加上一個(gè)負(fù)數(shù)褪迟,即:1-1=1+(-1)=0;所以機(jī)器可以只有加法而沒有減法答憔,這樣計(jì)算機(jī)運(yùn)算的設(shè)計(jì)就更簡單了味赃,那么如果用原碼計(jì)算,1-1=1+(-1)=[0000 0001]原+[1000 0001]原=[1000 0010]原=-2.如果用原碼計(jì)算虐拓,讓符號(hào)位也參與運(yùn)算心俗,顯然對(duì)于減法來說,結(jié)果是不正確的,這也就是為什么計(jì)算機(jī)內(nèi)部不用原碼表示一個(gè)數(shù)城榛。
為了解決原碼做減法的問題出現(xiàn)了反碼揪利,如果用反碼計(jì)算減法,1-1=1+(-1)= [0000 0001]原+ [1000 0001]原=[0000 0001]反+[1111 1110反]=[1111 1111]反=[1000 0000]原=-0狠持,發(fā)現(xiàn)用反碼計(jì)算減法疟位,結(jié)果的真值部分是正確的,而唯一的問題其實(shí)出現(xiàn)在0這個(gè)特殊的數(shù)值上喘垂,雖然人們理解上+0和-0是一樣的甜刻,但是0帶符號(hào)是沒有任何意義的,而且會(huì)有[0000 0000]原和[1000 0000]原兩個(gè)編碼表示0王污。
于是補(bǔ)碼的出現(xiàn)罢吃,解決了0的符號(hào)以及兩個(gè)編碼的問題:1-1=1+(-1)=[0000 0001]原+[1000 0001]原=[0000 0001]補(bǔ)+[1111 1111]補(bǔ)=[0000 0000]補(bǔ)=[0000 0000]原楚午,這樣0用[0000 0000]表示昭齐,而以前出現(xiàn)的問題-0則不存在了,而且可以用[1000 0000]表示-128矾柜;(-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]補(bǔ) + [1000 0001]補(bǔ) = [1000 0000]補(bǔ)阱驾。-1-127的結(jié)果應(yīng)該是-128, 在用補(bǔ)碼運(yùn)算的結(jié)果中, [1000 0000]補(bǔ) 就是-128。 但是注意因?yàn)閷?shí)際上是使用以前的-0的補(bǔ)碼來表示-128, 所以-128并沒有原碼和反碼表示.(對(duì)-128的補(bǔ)碼表示[1000 0000]補(bǔ)算出來的原碼是[0000 0000]原, 這是不正確的)怪蔑。使用補(bǔ)碼, 不僅僅修復(fù)了0的符號(hào)以及存在兩個(gè)編碼的問題, 而且還能夠多表示一個(gè)最低數(shù). 這就是為什么8位二進(jìn)制, 使用原碼或反碼表示的范圍為[-127, +127], 而使用補(bǔ)碼表示的范圍為[-128, 127].因?yàn)闄C(jī)器使用補(bǔ)碼, 所以對(duì)于編程中常用到的32位int類型, 可以表示范圍是: [-231, 231-1] 因?yàn)榈谝晃槐硎镜氖欠?hào)位.而使用補(bǔ)碼表示時(shí)又可以多保存一個(gè)最小值里覆。

作者:cumtchw
出處:http://www.cnblogs.com/cumtchw/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市缆瓣,隨后出現(xiàn)的幾起案子喧枷,更是在濱河造成了極大的恐慌,老刑警劉巖弓坞,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隧甚,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡渡冻,警方通過查閱死者的電腦和手機(jī)戚扳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來族吻,“玉大人帽借,你說我怎么就攤上這事〕瑁” “怎么了砍艾?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長巍举。 經(jīng)常有香客問我辐董,道長,這世上最難降的妖魔是什么禀综? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任简烘,我火速辦了婚禮苔严,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘孤澎。我一直安慰自己届氢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布覆旭。 她就那樣靜靜地躺著退子,像睡著了一般。 火紅的嫁衣襯著肌膚如雪型将。 梳的紋絲不亂的頭發(fā)上寂祥,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音七兜,去河邊找鬼丸凭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛腕铸,可吹牛的內(nèi)容都是我干的惜犀。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼狠裹,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼虽界!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起涛菠,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤莉御,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后俗冻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體礁叔,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年言疗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了晴圾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡噪奄,死狀恐怖死姚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情勤篮,我是刑警寧澤都毒,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站碰缔,受9級(jí)特大地震影響账劲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一瀑焦、第九天 我趴在偏房一處隱蔽的房頂上張望腌且。 院中可真熱鬧,春花似錦榛瓮、人聲如沸铺董。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽精续。三九已至,卻和暖如春粹懒,著一層夾襖步出監(jiān)牢的瞬間重付,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國打工凫乖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留确垫,地道東北人熄求。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓马昙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嚣镜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348