首先需要了解下三种编码形式:
计算机的原码、反码和补码
- 原码:符号位加上真值的绝对值,第一位表示符号,其余位表示值。
- 反码:正数的反码是其本身;负数的反码是在其原码的基础上,符号位不变,其余位取反。
- 补码:正数的补码还是其本身;负数的补码是在其原码的基础上,符号位保持不变,其余位取反,最后 1。即反码加1。
对于 5和-5,
- [ 5] = [0101]原 = [0101]反 = [0101]补
- [-5] = [1101]原 = [1010]反 = [1011]补
了解了上面三种编码形式,将正数变负数,和将负数变正数,就可通过位运算得到。
- 正数取反加一,则变成其对应的负数(补码表示)
- 负数取反加一,则变为其对应的正数(原码表示)
即:x_rev = ~x 1
代码示例:
取反的位运算
相关阅读计算机为何采用补码的形式来表示负数
,