题解 | #二进制中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;
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务