2020-02-22

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
评论区参考:
看了评论区,发现前面的方法很多人采用,但是也有些有差别的:我那个是用这个数分别和2,4,8,16等进行位运算计算,还有事用位运算右移每次和1进行位运算比较。其实本质一样的,就是选的静止参照物不同而已。

而还有一种非常棒的方法,确实没想到,就是运用n&(n-1)。n如果不为0,那么n-1就是二进制第一个为1的变为0,后面全为1.这样的n&(n-1)一次运算就相当于把最后一个1变成0.这样一直到运算的数为0停止计算次数就好了。


图片描述

实现代码为:

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

还可参考如下:1.https://blog.csdn.net/kongmin_123/article/details/82053824
————————————————
版权声明:本文为CSDN博主「Big sai」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:2.https://bigsai.blog.csdn.net/article/details/104055308

你可能感兴趣的:(2020-02-22)