- N +

補(bǔ)碼運(yùn)算可以化減為加,補(bǔ)碼運(yùn)算結(jié)果是補(bǔ)碼還是原碼

大家好,今天小編來(lái)為大家解答補(bǔ)碼運(yùn)算可以化減為加這個(gè)問(wèn)題,補(bǔ)碼運(yùn)算結(jié)果是補(bǔ)碼還是原碼很多人還不知道,現(xiàn)在讓我們一起來(lái)看看吧!

補(bǔ)碼進(jìn)位法則

通常我們說(shuō)的加減法進(jìn)位方式判斷是否溢出一般指的都是補(bǔ)碼方式運(yùn)算下的。無(wú)論是一位符號(hào)位還是兩位符號(hào)位,邏輯是相同的。

先由一位符號(hào)位說(shuō)起。假設(shè)是5位機(jī)器位,一位用作符號(hào)位,四位用作數(shù)據(jù)位,那么數(shù)據(jù)的表示范圍是:?24~24?1即:-16~15

因此我們上來(lái)就看一個(gè)溢出的例子,形成一種直觀的感受:-8-9=-17,果斷是溢出的。

補(bǔ)碼表示1,10001,0111=0,1111得到的數(shù)字是+1.具體發(fā)生了什么,你看,符號(hào)位發(fā)生了進(jìn)位。但數(shù)據(jù)位的運(yùn)算并沒(méi)有進(jìn)位。兩個(gè)負(fù)數(shù)的符號(hào)位一進(jìn)位,加和的數(shù)據(jù)居然由負(fù)變正了,所以肯定是發(fā)生了溢出。如果數(shù)據(jù)位也進(jìn)位,就會(huì)讓符號(hào)位還是1,看起來(lái),符號(hào)位沒(méi)有變化,因此檢查不出來(lái)已經(jīng)發(fā)生了進(jìn)位。

而在補(bǔ)碼運(yùn)算中,數(shù)據(jù)位高位為1,其實(shí)是比較小的數(shù),除了-8這種剛好卡在邊界的,其他較大的,如:

[0]補(bǔ)=0,0000[?1]補(bǔ)=1,1111[?2]補(bǔ)=1,1110[?3]補(bǔ)=1,1101[?4]補(bǔ)=1,1100[?5]補(bǔ)=1,1011[?6]補(bǔ)=1,1010[?7]補(bǔ)=1,1001[?8]補(bǔ)=1,1000[?9]補(bǔ)=1,0111[?10]補(bǔ)=1,0110[?11]補(bǔ)=1,0101[?12]補(bǔ)=1,0100[?13]補(bǔ)=1,0011[?14]補(bǔ)=1,0010[?15]補(bǔ)=1,0001[?16]補(bǔ)=1,0000

可以看出來(lái),-7-8高位數(shù)據(jù)位進(jìn)位,符號(hào)位也進(jìn)位,但是并不會(huì)溢出。?12?13,符號(hào)位進(jìn)位,高位進(jìn)位,會(huì)溢出。要想舉出高位進(jìn)位,單數(shù)符號(hào)位不進(jìn)位的,則可以在兩個(gè)正數(shù)中舉,這個(gè)比較容易想象,高位進(jìn)位,表示超出了4位數(shù)據(jù)位表達(dá)的極限,恰好符號(hào)位都是0,因此也符合:

只有一個(gè)高位進(jìn)位或者符號(hào)位進(jìn)位就為溢出的規(guī)則。

而針對(duì)兩位符號(hào)位,其實(shí)就是把高位進(jìn)位和符號(hào)位進(jìn)位表示出來(lái)了,比如高位進(jìn)位到低的符號(hào)位得到的10,或者01,就表示溢出了。

而11,00分別表示數(shù)據(jù)為負(fù),正。

可以這么認(rèn)為,符號(hào)位進(jìn)位標(biāo)識(shí)SF,和數(shù)據(jù)位進(jìn)位標(biāo)識(shí)C,兩者不等時(shí),即異或?yàn)?時(shí),就產(chǎn)生了溢出。

判斷規(guī)則很簡(jiǎn)單,深入理解更重要。

update:第一稿在舉例論證的時(shí)候補(bǔ)碼的計(jì)算出現(xiàn)了錯(cuò)誤,經(jīng)過(guò)同學(xué)的指出,已經(jīng)更正。這篇的核心就是想說(shuō):

數(shù)據(jù)高位進(jìn)位,符號(hào)位進(jìn)位未進(jìn)位,溢出。

數(shù)據(jù)位高位未進(jìn)位,符號(hào)位進(jìn)位,溢出。

數(shù)據(jù)位高位進(jìn)位,符號(hào)位進(jìn)位,不溢出。

數(shù)據(jù)位高位未進(jìn)位,符號(hào)位未進(jìn)位,不溢出。

溢出的判斷就是這兩個(gè)標(biāo)識(shí)的組合。從中抽出布爾代數(shù)的表達(dá)式就是SF與C異或?yàn)?時(shí)判定為溢出。用雙符號(hào)位時(shí),右邊的數(shù)符跟蹤的是數(shù)據(jù)位高位是否進(jìn)位。左邊的數(shù)符跟蹤的是符號(hào)位是否進(jìn)位,這便是用11,00分別作為負(fù)數(shù),正數(shù)且未溢出的標(biāo)識(shí),10,01則分別是負(fù)數(shù)和正數(shù)的溢出。

不管編碼,我們知道整數(shù)的計(jì)算時(shí),正數(shù)與正數(shù)相減等同于正數(shù)與負(fù)數(shù)相加不會(huì)溢出。只有正數(shù)加正數(shù)和負(fù)數(shù)加負(fù)數(shù)時(shí)才可能產(chǎn)生溢出。而這兩種情況對(duì)應(yīng)的便是異或?yàn)?的兩種情況。

此外既然是溢出判斷,也可以換個(gè)角度從編碼表示范圍思考。

二進(jìn)制計(jì)算的疑惑,減去某個(gè)數(shù)等于加上它的補(bǔ)碼(())

"減去某個(gè)數(shù)等于加上它的補(bǔ)碼"這句話(huà)本身不嚴(yán)謹(jǐn),存在問(wèn)題。如果說(shuō)“減去某個(gè)數(shù)等于加上它的相反數(shù)的補(bǔ)碼”則比較嚴(yán)謹(jǐn)。例如你舉的3-1這個(gè)例子:3減去1等于3加上1的相反數(shù)-1的補(bǔ)碼。對(duì)于三位二進(jìn)制補(bǔ)碼而言,011-001=011+111。

復(fù)數(shù)的補(bǔ)碼公式是

一:對(duì)于正數(shù),原碼和反碼,補(bǔ)碼都是一樣的,都是正數(shù)本身.對(duì)于負(fù)數(shù),原碼是符號(hào)位為1,數(shù)值部分取X絕對(duì)值的二進(jìn)制.反碼是符號(hào)位為1,其它位是原碼取反.補(bǔ)碼是符號(hào)位為1,其它位是原碼取反,未位加1.也就是說(shuō),負(fù)數(shù)的補(bǔ)碼是其反碼未位加1.移碼就是將符號(hào)位取反的補(bǔ)碼二:在計(jì)算機(jī)中,實(shí)際上只有加法運(yùn)算,減法運(yùn)算也要轉(zhuǎn)換為加法運(yùn)算,乘法轉(zhuǎn)換為加法運(yùn)算,除法轉(zhuǎn)換為減法運(yùn)算.三:在計(jì)算機(jī)中,對(duì)任意一個(gè)帶有符號(hào)的二進(jìn)制,都是按其補(bǔ)碼的形式進(jìn)行運(yùn)算和存儲(chǔ)的.之所以是以補(bǔ)碼方式進(jìn)行處理,而不按原碼和反碼方式進(jìn)行處理,是因?yàn)樵趯?duì)帶有符號(hào)位的原碼和反碼進(jìn)行運(yùn)算時(shí),計(jì)算機(jī)處理起來(lái)有問(wèn)題.而按補(bǔ)碼方式,一方面使符號(hào)位能與有效值部分一起參加運(yùn)算,從而簡(jiǎn)化運(yùn)算規(guī)則.另一方面使減法運(yùn)算轉(zhuǎn)換為加法運(yùn)算,進(jìn)一步簡(jiǎn)化計(jì)算機(jī)中運(yùn)算器的線(xiàn)路設(shè)計(jì)四:補(bǔ)碼加、減運(yùn)算公式1):補(bǔ)碼加法公式[X+Y]補(bǔ)=[X]補(bǔ)+[Y]補(bǔ)2):補(bǔ)碼減法公式[X-Y]補(bǔ)=[X]補(bǔ)-[Y]補(bǔ)=[X]補(bǔ)+[-Y]補(bǔ)已知[+Y]補(bǔ)求[-Y]補(bǔ)的規(guī)則是全部位(含符號(hào)位)按位取反后再加1.五:由補(bǔ)碼求原碼已知一個(gè)數(shù)的補(bǔ)碼,求原碼的操作分兩種情況:

1.如果補(bǔ)碼的符號(hào)位為0,表示是一個(gè)正數(shù),所以補(bǔ)碼就是該數(shù)的原碼.2.如果補(bǔ)碼的符號(hào)位為1,表示是一個(gè)負(fù)數(shù),求原碼的操作可以是:符號(hào)位為1;其余各位取反,然后再整個(gè)數(shù)加1.以8位二進(jìn)制操作為例,其運(yùn)算取值范圍是-128~127.

補(bǔ)法加法與減法的運(yùn)算規(guī)則

為了簡(jiǎn)單下面用一個(gè)字節(jié)表示一個(gè)整數(shù)

-54原碼10110110反碼11001001補(bǔ)碼11001010

-30原碼10011110反碼11100001補(bǔ)碼11100010

反碼相加

11001001+11100001->10101010+1=10101011->(取反)11010100(-84)

補(bǔ)碼相加

11001010+11100010->10101100->(取補(bǔ)碼)11010100(-84)

反碼:一個(gè)數(shù)如果為正,則它的反碼與原碼相同;

一個(gè)數(shù)如果為負(fù),則符號(hào)位為1,其余各位是對(duì)原碼取反。

兩個(gè)數(shù)的二進(jìn)制反碼求和的運(yùn)算規(guī)則:

1、從低位到高位逐列進(jìn)行運(yùn)算;

2、0+0=1,0+1=1,1+1=0(進(jìn)位1加到下一列);

3、最高位相加產(chǎn)生的進(jìn)位,要在最后的結(jié)果加1.

補(bǔ)碼:一個(gè)數(shù)如果為正,則它的原碼、反碼、補(bǔ)碼相同;

一個(gè)數(shù)如果為負(fù),則符號(hào)位為1,其余各位是對(duì)原碼取反,然后整個(gè)數(shù)加1。

補(bǔ)碼加減法運(yùn)算法則如下:

1、參加運(yùn)算操作的數(shù)都用補(bǔ)碼表示。

2、數(shù)據(jù)的符號(hào)與數(shù)據(jù)一樣參加運(yùn)算。

3、求差時(shí)將負(fù)減數(shù)求補(bǔ),用求和代替求差,將減法運(yùn)算轉(zhuǎn)化為補(bǔ)碼的加法運(yùn)算。

4、運(yùn)算結(jié)果為補(bǔ)碼。如果符號(hào)位為0,表明運(yùn)算結(jié)果為正;如果符號(hào)位為1,則表明結(jié)果為負(fù)。

5、符號(hào)位的進(jìn)位為模值,應(yīng)該去掉。

加減法計(jì)算為什么使用補(bǔ)碼,補(bǔ)碼到底是怎

補(bǔ)碼的出現(xiàn)是為了滿(mǎn)足二進(jìn)制負(fù)數(shù)數(shù)據(jù)以及減法運(yùn)算。

因?yàn)榧臃ㄟ\(yùn)算相對(duì)電子計(jì)算機(jī)更加簡(jiǎn)潔,所以我們可以將減法運(yùn)算通過(guò)補(bǔ)碼轉(zhuǎn)換成加法運(yùn)算,以實(shí)現(xiàn)簡(jiǎn)化電路。

補(bǔ)碼定義為(N)補(bǔ)=R^n-N,其中R為數(shù)值,n為位數(shù)。我們以十進(jìn)制為例,想要計(jì)算84-36,那么只需要計(jì)算84+(46)補(bǔ)-10^2=84+64-100=48。以此在計(jì)算中發(fā)到負(fù)數(shù)變正數(shù),減法變加法的目的。

關(guān)于補(bǔ)碼運(yùn)算可以化減為加,補(bǔ)碼運(yùn)算結(jié)果是補(bǔ)碼還是原碼的介紹到此結(jié)束,希望對(duì)大家有所幫助。

返回列表
上一篇:
下一篇: