補碼是最常見的有符號數的計算機表示方式,在這個定義中,將字的最高有效位解釋為負權
例如:
Java采用補碼表示,
反碼的最高位的權比補碼多1,即
原碼的最高有效位是符號位,用來確定剩下的位應該取負權還是正權
例如:
(字長=16)
0的表示:
補碼:0000000000000000
反碼:+0=0000000000000000 -0=1111111111111111
原碼:+0=0000000000000000 -0=1000000000000000
-1的表示:
補碼:0xFFFF
反碼:1111111111111110
原碼:1000000000000001
正數的補碼、反碼、原碼都相同
負數原碼與反碼的相互轉換
負數原碼轉化為反碼:符號位不變,數值位按位取反
例如:
負數反碼轉化為原碼:符號位不變,數值位按位取反
例如:
負數反碼和補碼的相互轉化
負數反碼轉化為補碼:末尾加1,若數值最高位有進位則丟棄,不向符號位進位
例如:
(為什麽是加1?前面說過,同樣的壹個最高位為1的向量,反碼比補碼多1,如果反碼轉化為補碼而沒有任何變動,則大小憑空少了1,所以要加1)
負數補碼轉化為反碼:末尾減1
例如:
幾乎所有現代機器使用補碼表示有符號數,但浮點數中有使用原碼編碼