一 源碼求補碼
求給定數值的補碼分以下兩種情況:
正數
正整數的補碼是其二進制表示,與原碼相同。
例:+9的補碼是00001001。(備注:這個+9的補碼是用8位2進制來表示的,補碼表示方式很多,還有16位二進制補碼表示形式,以及32位二進制補碼表示形式,64位進制補碼表示形式等。每一種補碼表示形式都只能表示有限的數字)。
負數
求負整數的補碼,將其原碼除符號位外的所有位取反(0變1,1變0,符號位為1不變)后加1。
同一個數字在不同的補碼表示形式中是不同的。比如-15的補碼,在8位二進制中是11110001,然而在16位二進制補碼表示中,就是1111111111110001。以下都使用8位2進制來表示。
例:求-5的補碼。
-5對應正數5(00000101)→所有位取反(11111010)→加00000001(11111011)
所以-5的補碼是11111011。
0的補碼
數0的補碼表示是唯一的。
[+0]補=[+0]反=[+0]原=00000000
[-0]補=11111111+1=00000000
補碼求原碼
已知一個數的補碼,求原碼的操作其實就是對該補碼再求補碼:
⑴如果補碼的符號位為“0”,表示是一個正數,其原碼就是補碼。
⑵如果補碼的符號位為“1”,表示是一個負數,那么求給定的這個補碼的補碼就是要求的原碼。
例:已知一個補碼為11111001,則原碼是10000111(-7)。
因為符號位為“1”,表示是一個負數,所以該位不變,仍為“1”。
其余七位1111001取反后為0000110;再加1,所以是10000111。