回顧計算機中的原碼 反碼和補碼

2021-10-08 19:51:53 字數 2043 閱讀 7350

最近在看文章時,看到一篇文章介紹了計算機中的原碼、反碼、補碼的知識,覺得寫的很好,以前在學習的時候其實沒有學明白。在工作了幾年之後,再回頭看這些知識,突然覺得很好懂了,作文以記之。

原碼是指乙個二進位制數左邊加上符號位後所得到的碼,且當二進位制數大於0時,符號位為0;二進位制數小於0時,符號位為1;二進位制數等於0時,符號位可以為0或1(+0/-0)。

舉個例子,2用原碼表示為10。為了表述方便,在此用4位來表示數字。那麼2用原碼表示為0010。3用原碼表示為0011。-2用原碼表示為1010,-3用原碼表示為1011

原碼方便計算機用來儲存和輸入數字。但是用來計算卻會出現很多問題。比如 3+3 =6 ,用原碼計算的過程是0011+0011=0110,換算為十進位制就是6。但是3+(-3)=0,用原碼計算的過程是0011+1011=1110得到的結果是-6,卻不是0。因此用原碼計算如果涉及到負數的情況下,會出現計算結果不正確的情況。因此,出現了反碼來解決這個問題。

首先看一下反碼的定義:正數的反碼與原碼是相同的。但是負數的反碼不同,符號位保持不變,其餘位取反。即如果為0則變為1,如果是1則變為0。舉個例子。2用原碼表示為0010反碼依然還是0010。-2用原碼表示為1010,用反碼表示則為1101。那麼在這種情況下,2+(-2)的結果是多少呢?且看運算:首先是原碼的計算:0010+1010=1100。結果是-4。用反碼計算:0010+1101=1111。此時的結果依然是反碼。再換算為原碼為1000,即-0。那麼此時會有乙個問題,10000000表示的值為-0+0。但平時表達的過程中,0其實是不分正負的。因此為了解決這個問題,有大神就提出了補碼的概念。

且先看補碼的定義:正數的原碼、反碼、補碼相同。但是負數不同。負數的補碼是在反碼的基礎上+1。為了是能夠解決-0+0的問題。明確了補碼的定義之後,且看例子佐證。

還以反碼中2+(-2)=0的例子來看,-2的反碼為1101,按照補碼的定義+1則變為1101+0001=1110,2的補碼與原碼相同,依然是0010。那麼補碼運算則是1110+0010=10000,去掉最高位,得到結果就是0。

再看乙個例子,(-2)+(-2)=-4。按照補碼的方式來計算:1110+1110=11100,去掉最高位,結果為1100。且看-4的原碼為1100,-4的反碼為1011,-4的補碼為1100。最後的結果即為-4,解決了計算機**現+0和-0的情況。

計算機內部實際上是通過加法、減法的方式來計算乘除法的。因為乘法和除法其本質就是累加和累減,懂得了原碼、反碼、補碼的知識,便能對計算機底層的運算原理更加清晰。

計算機中的原碼 反碼和補碼

計算機中的原碼 反碼和補碼 看到這個標題,很多人有話要說了,切!這個東西每一本計算機基礎知識的書中都有介紹的,你還拿出來show什麼嘛!我的原則是你需要就來看一看,懂就不要去理會,倒也不必諷刺兩句,我相信總有需要它的人。當初我看書是沒看明白的,在網上查了好多資料才有所悟。前幾天跟老婆講原碼 反碼和補...

計算機中的原碼 補碼和反碼

數在計算機中是以二進位制形式表示的。數分為有符號數和無符號數。原碼 反碼 補碼都是有符號定點數的表示方法。乙個有符號定點數的最高位為符號位,0是正,1是副。以下都以8位整數為例,原碼就是這個數本身的二進位制形式。例如0000001 就是 1 1000001 就是 1 正數的反碼和補碼都是和原碼相同。...

計算機中的原碼 反碼和補碼

大家都知道資料在計算機中都是按位元組來儲存了,1個位元組等於8位 1byte 8bit 而計算機只能識別0和1這兩個數,所以根據排列,1個位元組能代表256種不同的資訊,即2 8 0和1兩種可能,8位排列 比如定義乙個位元組大小的無符號整數 unsigned char 那麼它能表示的是0 255 0...