原码、反码、补码的转换与运算
正数的原码、反码、补码都相等。
- 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