巧用(n-1)&n
可以让n二进制最低位的1变成0
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)
{
n=(n-1)&n;
}
return count;
}
3:判断一个数奇偶性
bool isEven(int n)
{
if(n&1==1) return false;
else return true;
}
4:对一个正整数除以2得到约数
n>>1