目录python
若是把n以二进制形式展现的话,咱们只须要判断最后一个二进制位是1仍是0,若是
是1的话,表明是奇数,若是是0则表明是偶数code
for n in range(10): if n & 1 == 1: # n为奇数 print(n)
两个相同的数异或以后结果会等于0,即n^n=0。任何数与0异或等于它自己
异或运算支持交换律和结合律it
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)
找出一个全是数字的列表中没有重复出现的数class
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)
若是n=13,则n的二进制表示为1101,那么3的13次方能够拆解为:3^1101 = 3^00013^01003^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_
def find_n(n): n |= n >> 1 n |= n >> 2 n |= n >> 4 n |= n >> 8 # 整形通常是32位,上面假设是8位 return (n + 1) >> 1