-
判断是2的倍数
即判断该数二进制末位是不是0:a % 2 == 0 或者a & 0x0001 == 0。
-
1的个数
- 十进制中1的个数:直接逐位除十取余判断
- 二进制中1的个数(剑指Offer-15)
右移与1判断(如果是负数,一直右移会陷入死循环)
为避免死循环,左移1与原数相与循环判断(循环次数等于整数二进制的位数)
n = (n - 1) & n; //循环判断
int NumberOf1(int n) { int count = 0; while(n) { ++ count; n = (n - 1) & n; //把一个整数减去1,再和原整数相与,会把该整数最右边的1变为0。 } return count; }