首先,正數的原碼,反碼,補碼都是相同的。
所以,這里討論負數的原碼,反碼,補碼的相互轉化問題。
1. 負數原碼和反碼的相互轉化
負數原碼轉化為反碼:符號位不變,數值位按位取反。
如:
原碼 1100 0010 反碼 1011 1101
負數反碼轉化為原碼:符號位不變,數值位按位取反。
反碼 1011 1101 原碼 1100 0010
2. 負數原碼和補碼的相互轉化
負數原碼轉化為補碼:符號位不變,數值位按位取反,末尾加一。
原碼 1100 0010 反碼 1011 1101 //符號位不變,數值位按位取反 補碼 1011 1110 //末尾加1
負數補碼轉化為原碼:符號位不變,數值位按位取反,末尾加1。
補碼 1011 1110 1100 0001 //符號位不變,數值位按位取反 原碼 1100 0010 //末尾加1
3.負數反碼和補碼的相互轉化
負數反碼轉化為補碼:末尾加1。
反碼 1011 1101 補碼 1011 1110
負數補碼轉化為反碼:末尾減1(注意,此處的反碼是指原碼的反碼)。
補碼 1011 1110 原碼的反碼 1011 1101 //減法 借位
4.總結
正數的原碼、反碼和補碼都相同。
負數原碼和反碼的相互轉換:符號位不變,數值位按位取反。
負數原碼和補碼的相互轉換:符號位不變,數值位按位取反,末位再加1。