剑指offer 二进制中1的个数

Posted John_yan15

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指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 。 

以上是关于剑指offer 二进制中1的个数的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer面试题 15. 二进制中 1 的个数

剑指offer 二进制中1的个数

剑指Offer-Java-二进制中1的个数

剑指Offer-Java-二进制中1的个数

剑指offer11二进制中1的个数

剑指offer第十一题:二进制中1的个数