1、基礎操做it
1.a<<b基礎
將二進制a左移b位,不夠的地方用0補位原理
例如進階
100<<2 == 10000二進制
2.a>>b集合
將二進制a右移b位移動
例如
100>>2 == 1
3.a|b
或操做(按位或),相同位中只要有一個1或者兩個1則結果爲1,全0則結果爲0
4.a&b
與操做(按位與),相同位中只要都是1,則結果爲1,若是一個爲0一個爲1或者都是0則結果爲0。
5.a^b
異或,相同位只要一個1一個0,則結果爲1;相同位二進制相同則結果爲0 。
2、進階操做
1.快速求2^n
1<<n == pow(2,n)
原理:1<<n的意思是1的二進制向左移動n位,則此數二進制形式變成了 100000...000(n個0),剛好是2^n
2.判斷奇數偶數
n&1 == 1則爲奇數
n&1 == 0則爲偶數
原理:n&1的意思是n與1,那麼n與1中,1除了右端位爲1其餘位都是0,則由與運算獲得的結果中其餘位一定都是0 。
因此最後獲得的結果只與1的右端位和n的右端位有關,咱們知道1的右端位爲1,那麼n的右端位只有爲1的時候與1進行與運算的結果是1;n的右端位只有爲0的時候與1進行與運算的結果是0 。
顯然二進制右端位爲1的時候該數爲奇數,爲0時該數爲偶數,因此得證。
3.lowbit
a&(-a) 表明着a的二進制的最後一位。
原理:涉及到二進制的補碼知識,感興趣的人能夠本身瞭解。
3、高階操做
1.a >> b & 1 表明着若是a的第b位爲1則爲真
用來判斷二進制的某一位
原理:a左移b位,則a的右端位就是原來a的第b位,這時與1作與運算(1左邊的0由與運算性質得沒有影響)就能夠得知這一位是1仍是0(1&1 == 1,0|1 == 0 )
2.a|(1<<n) 表明着將a的二進制的第n位設爲1
原理:1<<n能夠看做由一個1和n個0組成的二進制數,其中0的部分由或的性質(0|0==0,1|0==1)能夠知道不會對二進制位產生影響。
而1的部分由或的性質(1|1==1,0|1=1)能夠得出必定是1。
4、圖論
x表示要判斷的點,S表示集合
(1 << x) & S == true 即x在S集合裏,若是爲false則x不在S集合裏
S = S | (1 << x) 表示S集合中加入了x點