巧用(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