美文网首页
剑指offer--11. 二进制中1的个数

剑指offer--11. 二进制中1的个数

作者: yui_blacks | 来源:发表于2018-11-23 20:12 被阅读0次

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

思路:
二进制数每位挨个和 1 (左移后其实不是1了,如:000100 ) 做与(&)运算,结果不是零则count++

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

如果移位的不是 1 而是 n 的话,要注意负数(补码)向右移位时最左端会补1,这样就死循环了,解决方法时把 n = n >> 1 改成 n = n >>>1,">>>" 无视符号位移位

public class Solution {
    public int NumberOf1(int n) {
        if(n == 0)
            return 0;
        int count = 0;
        while(n != 0){
            if((n & 1) == 1)
                count++;
            n = n >>> 1; // 无视符号位右移
        }
        return count;
    }
}

相关文章

网友评论

      本文标题:剑指offer--11. 二进制中1的个数

      本文链接:https://www.haomeiwen.com/subject/hfjsqqtx.html