2.3.5 按位运算符
简单来说,按位运算就是把数字转换为机器语言——二进制的数字来进行运算的一种运算形式。在Python中,按位运算符有按位与运算符(&)、按位或运算符(|)、按位异或运算符(^)、按位取反运算符(~)、左移运算符(<<)、右移运算符(>>),如表2-6所示。在这些运算符中,只有按位取反运算符是单目运算符,其他都是双目运算符。
表2-6 Python中的按位运算符
1.按位与(&)运算符
参与运算的两个值,如果两个相应位都为1,则该位的结果为1;否则为0。
范例:3&5
解法:3的二进制补码是011,5的二进制补码是101,3&5也就是011&101。先看百位(其实不是百位,这样说只是便于理解),一个是0,一个是1,根据1&1=1、1&0=0、0&0=0、0&1=0,可知百位应该是0,同样,十位上的数字1&0=0,个位上的数字1&1=1,因此,最后的结果是1。
2.按位或(|)运算符
只要对应的两个二进制位有一个为1,结果位就为1。
范例:4|7
解法:按位或的运算规律和按位与的运算规律很相似,只不过换了逻辑运算符,或的规律是:1|1=1,1|0=1,0|0=0。4|7转换为二进制就是100|111=111,二进制数111即十进制数7。
技巧:利用按位或可以将任意二进制数的最后一位变为1,也就是X|1。
3.按位异或(^)运算符
当两个对应的二进制位相异时,结果为1。特别要注意的是不进位。
范例:2^5
解法:10^101=111,二进制数111即十进制数7。
4.按位取反(~)运算符
将二进制数+1 之后乘以-1,x的按位取反是-x-1。注意,按位取反运算符是单目运算符。-9、1+~4是正确的,5~3是错误的。
这是更快捷的按位取反算法,也可以按部就班地每位按位取反(包括符号位),最后如果是负数再转换为原码。
范例:~3
解法:十进制数3对应的二进制数是11,-(11+1)=-100。
5.按位左移(<<)运算符
X<<N表示将一个数字X所对应的二进制数向左移动N位。
范例:3<<2
解法:二进制数11向左移动两位变为1100,即十进制数12。
6.按位右移动(>>)运算符
X>>N表示将一个数字X所对应的二进制数向右移动N位。
范例:3>>2
解法:二进制数11向右移动两位变为二进制数0。