剑指offer 二进制中1的个数

题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

代码:

 1 class Solution {
 2 public:
 3      int  NumberOf1(int n) {
 4          int flag = 1; //设置 1 为标志位
 5          int count = 0;
 6          while ( flag != 0 ){ //由于int类型共32位故在flag左移出界时,跳出循环
 7              if( n & flag ) //& 按位与,即flag只有一位为 1 故 只有n对应位也为1时才可
 8                  count ++;
 9              flag = flag << 1; //左移一位
10          }
11          return count;
12      }
13 };

我的笔记:使用 & 按位与符号并设置一个标志位 flag 与 n 进行 与 操作。

注:负数在右移时是默认左侧补 1,而正数是补 0 。