原碼是什麼?
原碼就是早期用來表示數字的一種方式: 乙個正數,轉換為二進位制位就是這個正數的原碼。負數的絕對值轉換成二進位制位然後在高位補1就是這個負數的原碼
舉例說明:
int型別的 3 的原碼是 11b(b表示二進位制位), 在32位機器上佔四個位元組,那麼高位補零就得:
00000000 00000000 00000000 00000011
int型別的 -3 的絕對值的二進位制位就是上面的 11b 展開後高位補零就得:
10000000 00000000 00000000 00000011
但是原碼有幾個缺點,零分兩種 +0 和 -0 。很奇怪是吧!還有,在進行不同符號的加法運算或者同符號的減法運算的時候,不能直接判斷出結果的正負。你需要將兩個值的絕對值進行比較,然後進行加減操作 ,最後符號位由絕對值大的決定。於是反碼就產生了。
反碼是什麼 ?
正數的反碼就是原碼,負數的反碼等於原碼除符號位以外所有的位取反
舉例說明:
int型別的 3 的反碼是
00000000 00000000 00000000 00000011
和原碼一樣沒什麼可說的
int型別的 -3 的反碼是
11111111 11111111 11111111 11111100
除開符號位 所有位 取反
解決了加減運算的問題,但還是有正負零之分,然後就到補碼了
補碼是什麼?
正數的補碼與原碼相同,負數的補碼為 其原碼除符號位外所有位取反(得到反碼了),然後最低位加1.
還是舉例說明:
int型別的 3 的補碼是:
00000000 00000000 00000000 00000011
int型別的 -3 的補碼是
11111111 11111111 1111111 11111101
就是其反碼加1
最後總結一下:
正數的反碼和補碼都與原碼相同。
負數的反碼為對該數的原碼除符號位外各位均取反。
負數的補碼為對該數的原碼除符號位外各位取反,然後在最後一位加1
各自的優缺點:
原碼最好理解了,但是加減法不夠方便,還有兩個零
反碼稍微困難一些,解決了加減法的問題,但還是有個零
補碼理解有點困難
計算機 原碼 反碼 補碼
在計算機中,用補碼來表示數字,因為 1 這樣可以比較方便的表示0 保證0作為正數或者負數補碼都是00000000 2 計算時用補碼直接加減就是最終數值 符號位參與運算 1.原碼 原碼就是符號位加上真值的絕對值,即用第一位表示符號,其餘位表示值.比如如果是8位二進位制 1 原 0000 0001 1 ...
計算機原碼, 反碼, 補碼
乙個數在計算機中的二進位制表示形式,叫做這個數的機器數。機器數是帶符號的,在計算機用乙個數的最高位存放符號,正數為0,負數為1.因為第一位是符號位,所以機器數的形式值就不等於真正的數值。例如上面的有符號數 10000011,其最高位1代表負,其真正數值是 3 而不是形式值131 10000011轉換...
計算機原碼,反碼,補碼
最近花了點時間對計算機的原碼,反碼和補碼進行了研究,對為什麼要有反碼和補碼以及他們這麼設計的原因有了一定的理解 機器數 乙個數在計算機中的表現形式叫做機器數,這個數有正負之分,在計算機中用乙個數的最高位 符號位 用來表示它的正負,其中0表示正數,1表示負數。例如正數7,在計算機中用乙個8位的二進位制...