目錄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