题解 | #二进制中1的个数#

二进制中1的个数

http://www.nowcoder.com/practice/8ee967e43c2c4ec193b040ea7fbb10b8

记录题解。
首先明白 负数在二进制运算中是以补码的形式进行的(正数其实就是他本身),那么让其不断进行无符号的右移 并和1进行与运算,便能统计出 二进制中 1 的个数了。

public class Solution {
    public int NumberOf1(int n){
        int count = 0;//用于统计二进制中1的个数
        while ( n != 0){
            if ((n&1) != 0){
                count++;
            }
            n >>>= 1; // 无符号右移,和 1 进行 与运算 统计 二进制中1的个数
        }
        return  count;
    }
}

官方提供的技巧法。
好处:省去了if判断的过程。

public class Solution {
    public int NumberOf1(int n){
        int ans = 0;
        while (n != 0) {
            ++ans;
            n = n & (n-1);
        }
        return ans;
    }
}
全部评论

相关推荐

牛客吹哨人:哨哥晚点统一更新到黑名单:能救一个是一个!26届毁意向毁约裁员黑名单https://www.nowcoder.com/discuss/1525833
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务