剑指offer10二进制中1的个数

1.问题描述

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

2.思路解析

一个数减1之后的结果,再和它本身按位与,即n&(n-1)和n相比,最右边的1变成了0。举例,1100-1=1011

1100&1011=1000.利用这个方法可以统计二进制数中1的个数。

3.c++代码

class Solution {
public:
     int  NumberOf1(int n) {
         int count = 0;
         while (n!=0){
             count++;
             n = (n-1)&n;
         }
         return count;
     }
};

4.总结

很多二进制问题可以用此法解决。比如,计算需要改变m的二进制表示的多少位能得到n,可以将mn异或,对结果求二进制表示的1的个数。

猜你喜欢

转载自blog.csdn.net/weixin_40888121/article/details/80610051