正數、負數求原碼、反碼、補碼
二進位制,有符號數,首位為1的是負數,首位為0的是正數。(規定)
無符號數沒有正負之分,所以也沒有首位的限制。(規定)
(以下示例皆以八位二進位制表示)
無符號數
無符號數的原碼、反碼、補碼都一樣,皆為該數的二進位制表示法
原碼 反碼 補碼
定義
無符號數的原碼為該數的二進位制表示法
無符號數的反碼與原碼一樣
無符號數的補碼與原碼一樣
舉例
1(無符號數)==>0000 0001(原碼)==>0000 0001(反碼)==>0000 0001(補碼)
正數
正數的原碼、反碼、補碼都一樣,皆為該數的二進位制表示法(同無符號數差不多)
原碼 反碼 補碼
定義
正數的原碼為該數的二進位制表示法。
正數的反碼與原碼一樣。
正數的補碼與原碼一樣
舉例
1==>0000 0001(原碼)==>0000 0001(反碼)==>0000 0001(補碼)
(首位為0的表示正數,所以原碼、反碼和補碼的首位都是0)
負數
原碼
定義
負數的原碼為該數對應的無符號數的二進位制,將首位置1。
舉例
-1==>1(無符號數)==>0000 0001(無符號數的二進位制)==>1000 0001(原碼,首位置1)。
(負數的首位為1)
反碼
定義
負數的反碼為該數原碼的符號位不變,其它位取反。
舉例
-1==>1000 0001(原碼)==>1111 1110(反碼,符號為不變,其它位取反)。
(負數的首位為1)
補碼
定義
1、負數的補碼為該數對應的無符號數的二進位制取反加一。
2、負數補碼(首位為1)減一,取反表示的是這個數的無符號數的二進位制。
舉例
1
-128==>128(無符號數)==>1000 0000(-128的無符號數的二進位制)==>0111 1111(取反)==>1000 0000(補碼,加一)(負數的首位為1)
-1==>1(無符號數)==>0000 0001(-1對應無符號數的二進位制)==>1111 1110(取反)==>1111 1111(補碼,加1)(負數的首位為1)
2
1000 0000(補碼) ==> 0111 1111(減一) ==> 1000 000(取反,無符號數128)==> -128(負數)(負數的首位為1)
1111 1111(補碼) ==> 1111 1110(減一) ==> 0000 0001(取反,無符號數1) ==> -1(負數)(負數的首位為1)
後記
計算機皆使用補碼。用補碼計算,符號位也可以參與運算。若以原碼計算,符號位參與運算資料會出錯,所以還需要識別符號號位,會造成電路設計複雜,故拋棄。若以反碼計算,會存在+0與-0的問題,而0在人們的常識中是不存在正負之分的,所以也拋棄。
補碼取反加一為該數的相反數(補碼) eg: 1 ==> 0000 0001(補碼)==>1111 1110(取反) ==>1111 1111(加1) ==> -1
因為二進位制有位數限制,所以表示的數大小也有限制,8位表示的無符號數返回為0(0000 0000(補碼))~256(1111 1111(補碼)),有符號數為-128(1000 0000(補碼))~127(0111 1111(補碼))