首先,按位取反是二进制的一种计算方式,它的运算顺序是:原码——反码——补码——补码取反——补码取反后的码取反码——再取补码。。。。。
喵的,我自己看的都云里雾里,所以就举一个例子:
b=~7
prin(b)
猜猜等于多少? 哦豁~~~答案竟然是———(自己先想一想去)
首先,7的二进制形式是00000111,对它取反码,得00000111,取补码,得00000111。
什么?不知道什么是反码,补码,取反?好吧,普及一下,取反:即把1变成0,0变成1.
反码:正数的反码是其本身,负数的反码是符号位(第一位)不变,其它位0变1,1变0.
补码:反码的最后一位加1(若本身就是1,则向前进1位),内存中二进制是以补码形式储存的。
现在00000111取反,得11111000,对其取反码,得100000111,再取补码,得10001000,也就是-8。(对了,忘了说了,符号位是0为正,是1为负)
这样,~7,也就是7的按位取反就出来了,等于-8
现在再推一个负数:
c=~-7
print(c)
-7的二进制为10000111,反码:11111000,补码:11111001,补码取反:00000110,再取反码:00000110,取补码:00000110,最终结果为6。
好了,现在应该会了吧?顺便一提,0的按位取反是-1。
什么?你说每次这样算太麻烦了?好吧,告诉你个小窍门:
正数的按位取反为本身加一再取负(如~6=-7);
负数的按位取反为本身加一再取绝对值(如~-6=5)。