1. 原码、反码、补码三者之间的关系
计算机中的数值是以二进制码的方式存储的,而且是以补码的方式存储的,数值的运算也是以补码的形式进行运算。我们通常看到的数值一般是十进制数,可以简单地理解为计算机将补码转换成原码,然后再将原码转换成十进制显示出来。
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。
正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反
正数的补码就是其本身,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
正数:[+1] = [00000001]原 = [00000001]反 = [00000001]补
负数:
[-1]原 = 10000001
[-1]反 = 11111110
[-1]补 = 11111111
2. Python中按位取反(~)运算符的计算过程
计算机中的数值是以补码存储的
① Python中对正数按位取反:~1 = -2
[+1]原 = [+1]反 = [+1]补 = 0 0001
计算机中存储的时 0 0001,是正数1
按位取反:1 1110
1 1110的反码: [1 1110]反 = [1 0001]
末位加一:1 0010,即为-2
② Python中对负数按位取反:~-2 = 1
[-2]原 = 1 0010
[-2]反 = 1 1101
[-2]补 = 1 1110
计算机中存储的是 1 1110,是负数 -14
按位取反:0 0001
正数的反码和补码相同,即为1
总结,简单的记忆方法:~a = - (a + 1)