大家好,原碼反碼補(bǔ)碼真值轉(zhuǎn)換相信很多的網(wǎng)友都不是很明白,包括原碼和補(bǔ)碼的關(guān)系也是一樣,不過沒有關(guān)系,接下來就來為大家分享關(guān)于原碼反碼補(bǔ)碼真值轉(zhuǎn)換和原碼和補(bǔ)碼的關(guān)系的一些知識點(diǎn),大家可以關(guān)注收藏,免得下次來找不到哦,下面我們開始吧!
原碼反碼補(bǔ)碼計算器
1、二進(jìn)制補(bǔ)碼的計算方法
二進(jìn)制的補(bǔ)碼計算非常簡單,各種教材中也經(jīng)常使用二進(jìn)制來說明源碼、反碼與補(bǔ)碼三者的關(guān)系,掌握一定基礎(chǔ)的人都知道一下規(guī)則:
1.1原碼
最高位為符號位,0表示正數(shù),1表示負(fù)數(shù)。
例如:X=0b11(3),四比特表示原碼=0011(3);X=-0b11(-3),四比特表示原碼=1011(11);
1.2反碼
最高位為符號位,0表示正數(shù),1表示負(fù)數(shù)。
正數(shù)的反碼等于本身,負(fù)數(shù)的反碼除符號位外,各位取反:
例如:X=0b11(3),四比特表示原碼=0011(3),對應(yīng)反碼為=0011(3);X=-0b11(-3),四比特表示原碼=1011(11),對應(yīng)反碼為=1100(12);
1.3補(bǔ)碼
最高位為符號位,0表示正數(shù),1表示負(fù)數(shù)。
正數(shù)的補(bǔ)碼等于本身,負(fù)數(shù)的補(bǔ)碼等于反碼+1:
例如:X=0b11(3),四比特表示原碼=0011(3),對應(yīng)反碼為=0011(3),補(bǔ)碼為=0011(3);X=-0b11(-3),四比特表示原碼=1011(11),對應(yīng)反碼為=1100(12),補(bǔ)碼為1101(13);
2、十進(jìn)制的補(bǔ)碼計算方法
對于十進(jìn)制數(shù)來說,通過前面的性質(zhì)不難得到正十進(jìn)制數(shù)補(bǔ)碼等于其本身,對于負(fù)十進(jìn)制數(shù)來說如果還按位進(jìn)行運(yùn)算就太麻煩了!為了講明白,我們從補(bǔ)碼的起因說起:
“反碼加一”只是補(bǔ)碼所具有的一個性質(zhì),不能被定義成補(bǔ)碼。負(fù)數(shù)的補(bǔ)碼,是能夠和其相反數(shù)相加通過溢出從而使計算機(jī)內(nèi)計算結(jié)果變?yōu)?的二進(jìn)制碼。這是補(bǔ)碼設(shè)計的初衷,具體目標(biāo)就是讓1+(-1)=0,這利用原碼是無法得到的:
而在補(bǔ)碼中:
所以對于一個n位的負(fù)數(shù)-X,有如下關(guān)系:
所以假設(shè)寄存器是n位的,那么-X的補(bǔ)碼,應(yīng)該是
的二進(jìn)制編碼。
例如前面舉得例子:
例如:X=-0b11(-3),四比特表示原碼=1011(11),對應(yīng)反碼為=1100(12),補(bǔ)碼為1101(13);
如果寄存器4位,-3對應(yīng)的補(bǔ)碼二進(jìn)制數(shù)為13,剛好是
正十進(jìn)制數(shù)補(bǔ)碼等于其本身,n位寄存器下-X的補(bǔ)碼等于
對應(yīng)的二進(jìn)制編碼。
如果使用python的話,可以使用&來快速獲取補(bǔ)碼:
-3&0xfOut[1]:135&0xfOut[2]:5
這里的0xf指的是0b1111,表示4位的寄存器。如果是7位寄存器,0b111111就是0x3f。
3、已知補(bǔ)碼怎么求原碼?
對于正數(shù)來說,根據(jù)前面的介紹很容易知道原碼=補(bǔ)碼=反碼,接下來主要討論給定負(fù)數(shù)的補(bǔ)碼怎么求負(fù)數(shù)的原碼:
3.1二進(jìn)制
先說結(jié)論:補(bǔ)碼的補(bǔ)碼就是原碼。下面開始證明:
已知二進(jìn)制的補(bǔ)碼為
,根據(jù)1.3中求補(bǔ)碼的過程易得
事實(shí)上上式還等價于:
可以簡單證明一下,根據(jù)反碼實(shí)際的求解過程可以得到下面式子:
當(dāng)a=a-1時有:
上面兩式子說明了:
用文字描述即:取反加一等價于減一取反!
所以二進(jìn)制補(bǔ)碼有如下關(guān)系:
也就是說補(bǔ)碼的補(bǔ)碼就是原碼,有點(diǎn)負(fù)負(fù)得正的意思哦。
3.2十進(jìn)制
n位寄存器下-X的補(bǔ)碼等于
對應(yīng)的二進(jìn)制編碼。
(1)十進(jìn)制的情況下,如果給的補(bǔ)碼是無符號數(shù)
,那么原碼即
即可。
例如前面-3補(bǔ)碼無符號數(shù)是13,對應(yīng)的原碼就是
(2)十進(jìn)制的情況下,如果給的補(bǔ)碼是有符號數(shù)-Y,對應(yīng)的無符號數(shù)就是
,那么原碼就是
。
例如前面-3補(bǔ)碼有符號數(shù)是-5,對應(yīng)的原碼就是
編輯于2021-10-3013:39
原碼、反碼、補(bǔ)碼之間的轉(zhuǎn)換和簡單運(yùn)算
1、原碼轉(zhuǎn)換為反碼:符號位不變,數(shù)值位分別“按位取反”
2、反碼轉(zhuǎn)換為原碼也是一樣:符號位不變,數(shù)值位分別“按位取反”
3、原碼轉(zhuǎn)換為補(bǔ)碼:符號位不變,數(shù)值位按位取反,末位再加1
4、補(bǔ)碼轉(zhuǎn)換為原碼:符號位不變,數(shù)值位按位取反,末位再加1。即補(bǔ)碼的補(bǔ)碼等于原碼
5、求補(bǔ)(變補(bǔ)),即已知[X]補(bǔ),求[-X]補(bǔ)。符號位和數(shù)值位都取反,末位再加1
總結(jié)一下:
正整數(shù)的原碼、反碼和補(bǔ)碼都一樣;負(fù)數(shù)部分:原碼和反碼的相互轉(zhuǎn)換:符號位不變,數(shù)值位按位取反原碼和補(bǔ)碼的相互轉(zhuǎn)換:符號位不變,數(shù)值位按位取反,末位再加1已知補(bǔ)碼,求原碼的負(fù)數(shù)的補(bǔ)碼:符號位和數(shù)值位都取反,末位再加1
105和99的原碼,反碼,補(bǔ)碼的計算過程
假定一字節(jié)數(shù)。正99原馬是01100011負(fù)99原馬是11100011反馬是不考慮符號位,其它位反轉(zhuǎn),一變零,零變1。所以得10011100。
如何由補(bǔ)碼計算真值用10110100舉例的話
要由補(bǔ)碼計算真值,可以按照以下步驟進(jìn)行:
1.首先,確定該補(bǔ)碼的符號位。對于補(bǔ)碼的最高位,如果是0,則表示正數(shù);如果是1,則表示負(fù)數(shù)。符號位為0表示正數(shù),符號位為1表示負(fù)數(shù)。
2.如果補(bǔ)碼的符號位為0,則該補(bǔ)碼表示的是正數(shù)。你可以直接將該補(bǔ)碼轉(zhuǎn)換成二進(jìn)制形式進(jìn)行計算。對于你提供的例子10110100,符號位為0,表示正數(shù)。
3.如果補(bǔ)碼的符號位為1,則該補(bǔ)碼表示的是負(fù)數(shù)。要計算真值,需要進(jìn)行以下步驟:
a.首先,求補(bǔ)碼的反碼。反碼可以通過將補(bǔ)碼的每一位取反得到,即0變?yōu)?,1變?yōu)?。
b.然后,將反碼加1,得到補(bǔ)碼的原碼形式。
對于你提供的例子10110100,符號位為1,表示負(fù)數(shù)。那么需要進(jìn)行反碼和真值的計算:
1.反碼:01001011
2.補(bǔ)碼加1得到原碼:01001100
因此,補(bǔ)碼10110100表示的真值是-76。
19的原碼反碼補(bǔ)碼計算
一般是按8位二進(jìn)制來做,所以-19的原碼是(10010011),反碼是(11101100),補(bǔ)碼是(11101101)。
數(shù)據(jù)在計算機(jī)中是以二進(jìn)制的形式存在的,比如bytea=6;byteb=-6
分為兩種情況來說,一種是正數(shù),一種是負(fù)數(shù);對于正數(shù)6來說,原碼就是00000110,反碼和補(bǔ)碼也是這個;而對于-6來說,原碼就是10000110,這是為什么呢?因?yàn)樽罡呶唬ㄗ钭筮叺模┦潜硎痉枺?表示正數(shù),1表示負(fù)數(shù);
不管是byte,short,int還是其他的數(shù)字,最高位都是用來表示符號的,所以-6的原碼就是10000110,負(fù)數(shù)的反碼就是符號不變,其他的取反,就是11111001;負(fù)數(shù)的補(bǔ)碼就是在反碼的基礎(chǔ)上加1就行了,由于是二進(jìn)制的,是逢2進(jìn)1,所以補(bǔ)碼就是:11111010,;
?
反碼和原碼轉(zhuǎn)換
反碼的表示方法是:正數(shù)的反碼是其本身,負(fù)數(shù)的反碼是在其原碼的基礎(chǔ)上,符號位不變,其余各個位取反。
[+1]=[00000001](原碼)=[00000001](反碼)[-1]=[10000001](原碼)=[11111110](反碼)可見如果一個反碼表示的是負(fù)數(shù),人腦無法直觀的看出來它的數(shù)值。通常要將其轉(zhuǎn)換成原碼再計算。
原碼反碼補(bǔ)碼真值轉(zhuǎn)換的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于原碼和補(bǔ)碼的關(guān)系、原碼反碼補(bǔ)碼真值轉(zhuǎn)換的信息別忘了在本站進(jìn)行查找哦。