最近工作中用到了,補碼的概念,發現這些概念腦子裡全糊了
翻出書簡單複習一下,歸納如下:
首先我們討論的都是有符號數,第一位都是符號位 正0 負1
原碼:最簡單明瞭
x=+1101 [x原碼]=0,1101
x=-1101 [x原碼]=1,1101
這裡注意下原碼0有兩種表示法
+0原碼:0,0
-0原碼:1,0
補碼:
為什麼要有補碼呢:
因為原碼再做加減運算的時候,如果兩個數符號不同,要先判斷兩個數絕對值大小,然後將絕對值大的數減去絕對值小的數
結果的符號以絕對值大的數字準。
所以要找乙個與負數等價的正數來代替負數,就可以把減法計算用加法代替
於是出現了補碼。這個補數的概念一定要理解
乙個例子:
那麼上面的例子是對於12進製,我們來看看2進製是怎麼算補碼:
①:對於原碼是正數的情況,補碼等於原碼。
②:原碼為負數求補碼,那麼首先得用到它的模,直接讓此數加上模就可以得到它的對應的正數。
那模等於什麼呢?
對於二進位制數來說,有分整數和小數
比如+11十進位制為+3;
比如+0.11十進位制為+0.75:
整數的模是2的n次冪,n為包含符號位的個數;
例子:求-1101的補碼:
模是2的5次方:100000
補碼為:x+模=-1101+100000=10011,第一位為符號位,所以結果為-
小數的模為2
例子:求-0.0110的補碼:
補碼為:x+模 = -0.0110+10.0000=1.1010第一位為符號位,所以結果為-
這種方法求補碼有點麻煩,但是要明白計算
比較快的得出補碼是如下口訣
(這裡要注意,以上求補碼的方法都是對於負數來說的,對於正數,補碼就等於原碼)
用這個方法再求剛才的例子:
例子:求-1101的補碼:
第一步要先求出原碼:
原碼:1,1101
補碼用以上口訣:1,0011
例子:求-0.0110的補碼:
原碼為:1.0110
補碼為:1.1010
這裡還要注意:
對於補碼要注意0只有一種表示
那補碼多出來的1.0表示什麼呢?
我們看第一位是符號位說明是個負數,但是上面也說了-0的補碼和+0都是0.0
那我們來看看,對於-1,求它的補碼是什麼
[x]+模=-1.0+10.0=1.0
所以說1.0表示的是-1
可以理解成1.0表示小數補碼的最小值-1(我們這裡將-1作為小數)
同理對於補碼1,00(注意這裡是討論整數,分割用的是逗號,說明這不是乙個小數)
它表示的是-4(-100)
證:-100+1000=100(第一位作為符號位:1,00)
所以我們可以類推:
1,0 表示 -2
1,00表示 -4
1,000表示 -8
歸類如下:
對於補碼如果第一位符號位是1,後面全是0的情況
如果是小數,及1.0 表示 -1
如果是整數,及1,0 或者 1,00 或者 1,000 。。。。。表示 負的 2 的n次方(n表示0的個數)
3.反碼:
反碼只需要記住一句話:
如果原碼為正數,反碼等於原碼,如果原碼為負數,反碼為原碼基礎上除了符號位,每位取反:
x=+0.0110時,原碼為0.0110,反碼為0.0110(正數)
x=-0.0110時,原碼為1.0110,反碼為1.1001(負數)
我們還要注意到 對於反碼 0有兩種表示方式
我們來歸納一下:
計算機 原碼 反碼 補碼
在計算機中,用補碼來表示數字,因為 1 這樣可以比較方便的表示0 保證0作為正數或者負數補碼都是00000000 2 計算時用補碼直接加減就是最終數值 符號位參與運算 1.原碼 原碼就是符號位加上真值的絕對值,即用第一位表示符號,其餘位表示值.比如如果是8位二進位制 1 原 0000 0001 1 ...
計算機原碼, 反碼, 補碼
乙個數在計算機中的二進位制表示形式,叫做這個數的機器數。機器數是帶符號的,在計算機用乙個數的最高位存放符號,正數為0,負數為1.因為第一位是符號位,所以機器數的形式值就不等於真正的數值。例如上面的有符號數 10000011,其最高位1代表負,其真正數值是 3 而不是形式值131 10000011轉換...
計算機原碼,反碼,補碼
最近花了點時間對計算機的原碼,反碼和補碼進行了研究,對為什麼要有反碼和補碼以及他們這麼設計的原因有了一定的理解 機器數 乙個數在計算機中的表現形式叫做機器數,這個數有正負之分,在計算機中用乙個數的最高位 符號位 用來表示它的正負,其中0表示正數,1表示負數。例如正數7,在計算機中用乙個8位的二進位制...