計算機中的符號數有三種表示方法,即原碼、反碼和補碼。三種表示方法均有符號位和數值位兩部分,數碼的第一位為符號位,用0表示“正”,用1表示“負”,而數值位,三種表示方法各不相同。
作用:表示和存儲數值
C語言編譯系統分配給各種類型數據字節是不同的,如Turbo C 2.0為每一個整型數據分配2個字節(16個二進位),而Visual C++為每一個整型數據分配4個字節(32位)。
求給定數值的補碼分以下兩種情況:
正數
的補碼是其二進制表示,與原碼相同。
負數
求負整數的補碼,先將此數的絕對值寫成二進制形式除(即寫出此數絕對值的原碼),然后所有位取反(0變1,1變0 ),再加1。
例:求-5的補碼。
-5的絕對值5的原碼為(00000101)→所有位取反(11111010)→加1(11111011),所以-5的補碼是11111011.
例:求-4的補碼。
-4絕對值為4,4寫成二進制形式(原碼)為0000 0100,然后所有位數取反1111 1011,再加1得到1111 1100.
補碼求原碼
已知一個數的補碼,求原碼的操作其實就是對該補碼再求補碼:
⑴如果補碼的符號位為“0”,表示是一個正數,其原碼就是補碼。
⑵如果補碼的符號位為“1”,表示是一個負數,那么求給定的這個補碼的補碼就是要求的原碼。
例:已知一個補碼為11111001,求其原碼。
因為符號位為“1”,表示是一個負數。首先符號位不變,另外幾位都取反后為0000110;再加1,所以是10000111(-7)。
附:如果給整型變量分配2個字節,則在存儲單元中能存放的最大值為01111111 11111111,第1位為0代表正數,后面15位全為1,此數值是十進制2^15-1=32767。最小數是10000000 00000000,此數是-2^15,即-32768。因此一個整型變量的值范圍是-32768~32767。超過此范圍,就會出現數值的“溢出”,輸出的結果就會亂或者不准確。如果給整型變量分配4個字節,其能容納的數值范圍為-2^31~2^31-1,即-2147483648到2147483647。
