1. 判断一个整数是否是2的N次方?
bool foo(int n) { if(n == 0) return true; if(n < 0) return false; return !(n&n-1); }
2.统计一个整数的二进制中1的个数
int foo(int n) { int nCount = 0; while(n) { nCount++; n = n&(n-1); } return nCount; }
x&x-1表示把数字x对应的二进制的最右边的1变为0。
1. 判断一个整数是否是2的N次方?
bool foo(int n) { if(n == 0) return true; if(n < 0) return false; return !(n&n-1); }
int foo(int n) { int nCount = 0; while(n) { nCount++; n = n&(n-1); } return nCount; }