《剑指offer》-统计整数二进制表示中1的个数

简介: 题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。直观思路就是把二进制表示从右往左统计1的个数。直接想到移位操作来迭代处理。坑点在于负数的移位操作会填充1。有人贴出了逻辑移位操作,但还是麻烦。

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

直观思路就是把二进制表示从右往左统计1的个数。直接想到移位操作来迭代处理。坑点在于负数的移位操作会填充1。有人贴出了逻辑移位操作,但还是麻烦。直接按照int的位数,32或64,做这么多次移位操作就好了,每次移位操作累计是否为1。int的位数是32还是64,可以写一个函数来做到,而不是硬编码。

class Solution {
public:
    int  NumberOf1(int n) {
        int cnt = 0;
        int i = 0;
        int int_bit_length = get_int_bit_length();
        while (i<int_bit_length){
            cnt += (n & 1);
            n = (n >> 1);
            i = i + 1;
        }
        return cnt;
    }
    int get_int_bit_length(){
        int a = 1;
        int bit_cnt = 0;
        while (a != 0){
            a = (a<<1);
            bit_cnt += 1;
        }
        return bit_cnt;
    }
};
目录
相关文章
|
6月前
60.编程统计数组a中正数、0、负数的个数
60.编程统计数组a中正数、0、负数的个数
43 0
|
6月前
《剑指offer》——二进制中1的个数
《剑指offer》——二进制中1的个数
【剑指offer】-二进制中1的个数-11/67
【剑指offer】-二进制中1的个数-11/67
|
6月前
|
存储 C语言
C语言训练:三个字符串比较大小,实现两个整数数的交换统计二进制中1的个数
C语言训练:三个字符串比较大小,实现两个整数数的交换统计二进制中1的个数
|
11月前
统计两个整数所对应的二进制数中的不同位数的个数
统计两个整数所对应的二进制数中的不同位数的个数
41 0
|
机器学习/深度学习 C++
剑指offer 14. 二进制中1的个数
剑指offer 14. 二进制中1的个数
56 0
Python-剑指offer(10,11,12)矩形覆盖,二进制中1的个数,数值的整数次方
Python-剑指offer(10,11,12)矩形覆盖,二进制中1的个数,数值的整数次方
「题解」解决二进制数中1的个数
🐰取余取模法 🐰按位与法 🐰n=n&(n-1)法 🐰随记
leetcode 1356 根据数字二进制下1的数目排序
leetcode 1356 根据数字二进制下1的数目排序
70 0
leetcode 1356 根据数字二进制下1的数目排序
【剑指offer】二进制中1的个数&&2的幂
【剑指offer】二进制中1的个数&&2的幂
【剑指offer】二进制中1的个数&&2的幂