博文转载于https://blog.csdn.net/wybchy/article/details/76733780
“反码”,“取反”,“按位取反(~)”,这3个概念是不一样的。
取反:0变1,1变0
反码:正数的反码是其本身,对于负数其符号位不变其它各位取反(0变1,1变0)
按位取反(~): 这将是下面要讨论的。
要弄懂这个运算符的计算方法,首先必须明白二进制数在内存中的存放形式,二进制数在内存中是以补码的形式存放的。
另外正数和负数的补码不一样,正数的补码、反码都是其本身,负数的反码是符号位不变,其余位取反,补码是反码加1,即:
正数11:
原码:00001011
补码:00001011
反码:00001011
负数-12
原码:11111100
反码:11110011
补码:11110100
对正数11按位取反
原码: 00001011
补码: 00001011
反码: 00001011
对补码取反: 11110100
减1得反码: 11110011
反码取反: 11111100
对负数-12按位取反
原码: 11111100
反码: 11110011
补码: 11110100
对补码取反: 00001011
对正数取反的口诀:补码取反减1取反
对负数取反的口诀:原码取反加1取反
规律:正数的取反等于正数加1取负 例如11的取反等于-12
负数的取反等于负数加1取正 例如-12的取反等于11