问题:给定两变量,要求不使用第三变量,使得两变量值互换。
解决:
a = 1234
b = 5678
print("交换前,a={0},b={1}".format(bin(a),bin(b)))
a = a ^ b
b = a ^ b
a = a ^ b
print("交换后,a={0},b={1}".format(bin(a),bin(b)))
其他二进制位操作:
最低位1清零 : x&(x-1)
# 最低位1清零
a = 56
print('清零前,a:{0}'.format(bin(a)))
b = a-1
a = a & b
print('清零后,a:{0}'.format(bin(a)))
获取最低位1: x&!(x-1)
# 获取最低位的1
a = 56
print('清零前,a:{0}'.format(bin(a)))
b = ~(a-1)
a = a & b
print('清零后,a:{0}'.format(bin(a)))
交换指定两个位置的比特位:
def swapBit(x,i,j):
#如果两个位置的数值相同则无需交换
if ((x >> i)&1) != ((x >> j)&1):
x ^= ((1 << i )| (1 << j))
return x