Number of 1 bits
class Solution { public: int hammingWeight(uint32_t n) { uint32_t flag=1; int count=0; while(flag) { if(n&flag) count++; flag=flag<<1; } return count; } };
把数字n与1作与运算,判断n的最低位是不是1,接着把1左移一位得到2,再和n做与运算,就能判断n的次低位是不是1... 这样反复左移,每次都能判断n的其中一位是不是1。这种解法循环的次数等于n二进制的位数。
class Solution { public: int hammingWeight(uint32_t n) { int count=0; while(n) { count++; n=(n-1)&n; } return count; } };
*把n减1,就是把n二进制表达中的最后一个1变为0,如果它右边还有0的话,则所有的0都变为1,但该位左边的数字保持不变。如果把n减去1,再和原来的n做与运算,就会把该整数最右边的1变成0。n的二进制表达中有多少个1,就可以进行多少次这样的操作。
*一个数如果是2的整数次方,那么它的二进制表达中只有一个1。