最近在看文章時,看到一篇文章介紹了計算機中的原碼、反碼、補碼的知識,覺得寫的很好,以前在學習的時候其實沒有學明白。在工作了幾年之後,再回頭看這些知識,突然覺得很好懂了,作文以記之。
原碼
是指乙個二進位制數左邊加上符號位後所得到的碼,且當二進位制數大於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
。那麼此時會有乙個問題,1000
和0000
表示的值為-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...