1.判断奇偶数
如果把n以二进制形式展示的话,我们只需要判断最后一个二进制位是1还是0,如果
是1的话,代表是奇数,如果是0则代表是偶数
for n in range(10):
if n & 1 == 1: # n为奇数
print(n)
2.交换两个数
两个相同的数异或之后结果会等于0,即n^n=0。任何数与0异或等于它本身
异或运算支持交换律和结合律
x = 0
y = 1
x = x ^ y # (1)
y = x ^ y # y = x^y^y = x^0 = x (2)
x = x ^ y # 把(1)(2)带入这里得,x = x^y^x = 0^y = y
print(x, y)
3.找出没有重复的数
找出一个全是数字的列表中没有重复出现的数
li = [1, 2, 3, 4, 5, 1, 2, 3, 4]
tmp = li[0]
for i in range(1, len(li)):
tmp = tmp ^ li[i]
print(tmp)
4.3的n次方
如果n=13,则n的二进制表示为1101,那么3的13次方可以拆解为:3^1101 = 30001*30100*3^1000
def pow_(n):
sum_ = 1
tmp = 3
while n != 0:
if n & 1 == 1:
sum_ *= tmp
tmp *= tmp
print(bin(n))
n = n >> 1
return sum_
5. 找出不大于N的最大的2的幂指数
def find_n(n):
n |= n >> 1
n |= n >> 2
n |= n >> 4
n |= n >> 8 # 整形一般是32位,上面假设是8位
return (n + 1) >> 1