原碼、反碼、補碼的轉換與運算
正數的原碼、反碼、補碼都相等。
- 6[原] = 6[反] = 6[補] = 0110
負數的反碼是原碼符號位不變其餘位取反。(機器數最高位爲符號位,0表示正數,1表示負數)
- -6……= 1 0110
- -6[反] = 1 1001
負數的補碼 = 反碼+1
- -6[補]
- -6[反] + 1 = 1 1001 + 1
- -6[補] =……1 1010
補碼的補碼爲原碼。(或者:負數的補碼轉化爲原碼,除符號位外“減1取反”)
- -6[補]
- = 1 1010
- = 1 0101 + 1(-6[補][反] + 1)
- = 1 0110
- = -6……(原碼)
移位操作:(符號位不參與移位,負數轉換成補碼後再運算)
- 6 << 1 = 12
- 6 >> 1 = 3
- -6 << 1 = -12
- -6 >> 1 = -3
-6 << 1 =
- -6[原] = 1 0110
- -6[補] = 1 1001 + 1 = 1 1010
- 左移一位:1 0100
- 取其補碼,可得原碼:1 1011 + 1
- = 1 1100
- = -12
按位異或和或操作:(負數轉換爲補碼再計算)
- 5^3 = 6
- -5^3 = -8
- -5^-3 = 6
- -5|-3 = -1