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

题目:
输入一个整数,输出该数二进制表示中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;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容