常见的按位运算有:&、|、~、<<、>>
按位与运算&
print(-5 & 0xF)
print(5 & 0xF)
# 结果为
11
5
由上可知:python中进行按位与运算结果必然是正数,最高位是符号位的特质消失。主要是限定变量的位数(因为python中没有int、long来限制位数)
按位或运算 |
print(-5 | 0xF)
print(5 | 0xF)
# 其结果分别为
-1
15
由上可知:python中按位或运算仍然保留最高位的符号位特质
按位异或运算 ^
print(-5 ^ 0xF)
print(5 ^ 0xF)
# 其结果为
-12
10
由上可知:python按位异或运算也保留最高位的符号位特质,-5(前八位位0b11110100),0xF(前八位0b00001111)按位异或运算得(0b11110100),然后转换成整数(最高位是符号位)变成-12
移位运算 << >>
print(-5 << 1)
print(-5 >> 1)
# 其结果是
-10
-3
由上可知:移位运算保留最高位是符号位的特质
注:按位与运算会掩盖最高位是符号位的特质,因此要想最高位仍然充当符号位,必须用剩余4个进行处理
可解决的问题--剑指offer 65