剑指offer 二进制中1的个数 C++

题目描述

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

解答

class Solution {
public:
     int  NumberOf1(int n) {
         int count=0;
         unsigned int flag=1;
         while(flag)
         {
             if(n & flag)
                 ++count;
             flag=flag<<1;
         }
         return count;
     }
};

说明

这里用按位与的方法来做。一个整数可以直接按为与运算,就是在用其二进制的形式来进行。
这里flag初始化为1,和最右边一位按位与,如果原数字中也是1,那么统计数字加1。

另外,如果这个整数是32位的,那么循环一共要进行32次。如果这个整数是64位的,那么一共循环64次。因为向左移动一位,右边补0,需要让1完全移出flag才会是0,才终止循环。

猜你喜欢

转载自blog.csdn.net/yuanliang861/article/details/86590675
今日推荐