計算機使用一定的編碼方式進行儲存,原碼、反碼、補碼是機器儲存乙個具體數字的編碼方式
1 原碼
第一位表示符號 正數第一位為0,負數第一位為1,其餘位表示值;以8位二進位制表示
+1 原碼 0000 0001
-1 原碼 1000 0001
第一位為符號位(正負數符號位),所以8位二進位制原碼範圍為
1111 1111 ,0111 1111 即 -127,127
原碼是人容易理解的計算表示方式
2 反碼
正數的反碼就是其本身
負數的反碼是在原數基礎,符號位不變(第一位不變),其餘各個位取反。
+1 原碼 0000 0001 反碼 0000 0001
-1 原碼 1000 0001 反碼 1111 1110
負數的反碼是不可直**出,最好轉換成原碼方式進行計算,就是上例子中
反碼 1111 1110 轉換成原碼 1000 0001 ,就是-1了
3 補碼
正數的補碼就是其本身
負數的補碼是在原數基礎,符號位不變(第一位不變),其餘各個位取反,再+1
其實負數的補碼,是在負數的反碼基礎+1 即可
+1 原碼 0000 0001 反碼 0000 0001 補碼 0000 0001
-1 原碼 1000 0001 反碼 1111 1110 補碼 1111 1111
跟反碼相同,不可以直**出,負數的補碼轉換成原碼進行計算,方便理解
補碼1111 1111 先減一 1111 1110(現在反碼形式了) ,第一位(符號位不變),
其餘各位取反 1000 0001(原碼形式了) -1
原碼是最容易理解為什麼還需要引入反碼和補碼呢?
計算機運算只保留加法方式,為了解決原碼減法的問題,出現了反碼
例如 1-1 = 1+(-1)= 原碼 0000 0001 + 1000 0001 = 反碼 0000 0001 + 1111 1110 = 反碼 1111 1111
= 原碼 1000 0000 = -0
但是在 +0 和 -0 其實表示為0 ,二進位制位 0000 0000 ,1000 0000,為了解決0的
符號問題以及0的兩個編碼問題,出現了補碼
1-1 = 1+(-1) = 原碼 0000 0001 + 1000 0001 = 補碼 0000 0001 + 1111 1111
= 補碼 1 0000 0000(1沒有在這個1位元組裡面) = 原碼 0000 0000
這樣0就用 0000 0000 表示了,就沒有 -0的存在了
同時可以使用 1000 0000 表示-128
-1 + -127 = 原碼 1000 0001 + 1111 1111 = 補碼 1111 1111 + 1000 0001 = 補碼 1000 000
=反碼 1111 1111 = 原碼 1000 0000
這個地方 反碼 1000 0000 向反碼轉換可以 先原碼-128 是 -128為正數 1000 0000
這個第一位為1 應該是符號位,溢位丟棄進製法則:在用有符號整形表示二進位制數時,當後面的非符號位
發生溢位是,符號位不變,直接丟棄溢位為的進製
-128 原碼 1000 0000 最高位1表示符號位,後面7位發生溢位,進製丟棄,符號位不變
反碼 1111 1111 補碼 1000 0000 反碼末位加1,使後7位再次溢位,進製丟棄,符號位不變
綜上所述,使用補碼,修復了0的符號存在的-0和+0問題,還能夠多表示乙個最低數
即8位二進位制,使用原碼或反碼表示範圍 -127,+127;
使用補碼表示範圍 -128,127;機器使用補碼儲存在補碼表示是多儲存乙個最小值
計算機 原碼 反碼 補碼
在計算機中,用補碼來表示數字,因為 1 這樣可以比較方便的表示0 保證0作為正數或者負數補碼都是00000000 2 計算時用補碼直接加減就是最終數值 符號位參與運算 1.原碼 原碼就是符號位加上真值的絕對值,即用第一位表示符號,其餘位表示值.比如如果是8位二進位制 1 原 0000 0001 1 ...
計算機原碼, 反碼, 補碼
乙個數在計算機中的二進位制表示形式,叫做這個數的機器數。機器數是帶符號的,在計算機用乙個數的最高位存放符號,正數為0,負數為1.因為第一位是符號位,所以機器數的形式值就不等於真正的數值。例如上面的有符號數 10000011,其最高位1代表負,其真正數值是 3 而不是形式值131 10000011轉換...
計算機原碼,反碼,補碼
最近花了點時間對計算機的原碼,反碼和補碼進行了研究,對為什麼要有反碼和補碼以及他們這麼設計的原因有了一定的理解 機器數 乙個數在計算機中的表現形式叫做機器數,這個數有正負之分,在計算機中用乙個數的最高位 符號位 用來表示它的正負,其中0表示正數,1表示負數。例如正數7,在計算機中用乙個8位的二進位制...