天天看點

移位運算解決問題的例子

巧用(n-1)&n  可以讓n二進制最低位的1變成0

1:判斷一個數是否是2的次方 bool f(int n){ return ((n-1)&n==0);} 如果一個數是2的次方,那麼這個數的二進制中就隻有一個1。 (n-1)&n可以讓n二進制最低位的1變成0,如果n二進制隻有一個1那麼n做該種運算後就會變成0。

2:求一個數二進制中1的位數 int f(int n) { int count=0; while(n) {   count++; n=(n-1)&n; } return count; }

3:判斷一個數奇偶性 bool isEven(int n) { if(n&1==1) return false; else return true; }

4:對一個正整數除以2得到約數 n>>1