大家好,今天給各位分享補碼原碼反碼計算器的一些知識,其中也會對補碼轉化為十進制計算器進行解釋,文章篇幅可能偏長,如果能碰巧解決你現在面臨的問題,別忘了關注本站,現在就馬上開始吧!
補碼計算器
1、二進制補碼的計算方法
二進制的補碼計算非常簡單,各種教材中也經常使用二進制來說明源碼、反碼與補碼三者的關系,掌握一定基礎的人都知道一下規則:
1.1原碼
最高位為符號位,0表示正數,1表示負數。
例如:X=0b11(3),四比特表示原碼=0011(3);X=-0b11(-3),四比特表示原碼=1011(11);
1.2反碼
最高位為符號位,0表示正數,1表示負數。
正數的反碼等于本身,負數的反碼除符號位外,各位取反:
例如:X=0b11(3),四比特表示原碼=0011(3),對應反碼為=0011(3);X=-0b11(-3),四比特表示原碼=1011(11),對應反碼為=1100(12);
1.3補碼
最高位為符號位,0表示正數,1表示負數。
正數的補碼等于本身,負數的補碼等于反碼+1:
例如:X=0b11(3),四比特表示原碼=0011(3),對應反碼為=0011(3),補碼為=0011(3);X=-0b11(-3),四比特表示原碼=1011(11),對應反碼為=1100(12),補碼為1101(13);
2、十進制的補碼計算方法
對于十進制數來說,通過前面的性質不難得到正十進制數補碼等于其本身,對于負十進制數來說如果還按位進行運算就太麻煩了!為了講明白,我們從補碼的起因說起:
“反碼加一”只是補碼所具有的一個性質,不能被定義成補碼。負數的補碼,是能夠和其相反數相加通過溢出從而使計算機內計算結果變為0的二進制碼。這是補碼設計的初衷,具體目標就是讓1+(-1)=0,這利用原碼是無法得到的:
而在補碼中:
所以對于一個n位的負數-X,有如下關系:
所以假設寄存器是n位的,那么-X的補碼,應該是
的二進制編碼。
例如前面舉得例子:
例如:X=-0b11(-3),四比特表示原碼=1011(11),對應反碼為=1100(12),補碼為1101(13);
如果寄存器4位,-3對應的補碼二進制數為13,剛好是
正十進制數補碼等于其本身,n位寄存器下-X的補碼等于
對應的二進制編碼。
如果使用python的話,可以使用&來快速獲取補碼:
-3&0xfOut[1]:135&0xfOut[2]:5
這里的0xf指的是0b1111,表示4位的寄存器。如果是7位寄存器,0b111111就是0x3f。
3、已知補碼怎么求原碼?
對于正數來說,根據前面的介紹很容易知道原碼=補碼=反碼,接下來主要討論給定負數的補碼怎么求負數的原碼:
3.1二進制
先說結論:補碼的補碼就是原碼。下面開始證明:
已知二進制的補碼為
,根據1.3中求補碼的過程易得
事實上上式還等價于:
可以簡單證明一下,根據反碼實際的求解過程可以得到下面式子:
當a=a-1時有:
上面兩式子說明了:
用文字描述即:取反加一等價于減一取反!
所以二進制補碼有如下關系:
也就是說補碼的補碼就是原碼,有點負負得正的意思哦。
3.2十進制
n位寄存器下-X的補碼等于
對應的二進制編碼。
(1)十進制的情況下,如果給的補碼是無符號數
,那么原碼即
即可。
例如前面-3補碼無符號數是13,對應的原碼就是
(2)十進制的情況下,如果給的補碼是有符號數-Y,對應的無符號數就是
,那么原碼就是
。
例如前面-3補碼有符號數是-5,對應的原碼就是
編輯于2021-10-3013:39
電腦計算器負數相加得數怎么會是正數
1.負數在現代計算機里一般用補碼表示,為什么呢?原因是:保證0的左右不矛盾1是0001,推算出0是0000;-1的是1111,推算出0也是0000。
如果直接用反碼(0變成1,1變成0)那么0就會有兩個結果。如果用第一位表示符號,后三位表示大小,那么就有空間浪費。2.char類型是8位,10000000還原為原碼:最高位是1,表示負數,剩余的各位取反1111111再+1得到10000000,+128的原碼,整個數為-128OK,本文到此結束,希望對大家有所幫助。