剑指 Offer 15. 二进制中1的个数

简介: 这篇文章介绍了如何通过位运算计算一个无符号整数的二进制表示中1的个数,即汉明重量,并提供了相应的C语言函数实现。

剑指 Offer 15. 二进制中1的个数

题目描述 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。

示例 1:

输入:n = 11 (控制台输入 00000000000000000000000000001011) 输出:3 解释:输入的二进制串
00000000000000000000000000001011 中,共有三位为 ‘1’。

int hammingWeight(uint32_t n) {
    int count = 0;
    while(n>0)
    {
        if(n%2 == 1)   //有1就计数
        count++;
        n >>= 1;      //向右移位
    }
    return count;
}

解题思路
我们直接使用位运算或者除以2的方式解决
设想只有当一个十进制数为奇数时,它的二进制最低位为1,为偶数则为0,我们可以利用这一点直接统计一个无符号数中的1的个数
假设 n = 13
13 二进制为 1 1 0 1 为奇数 count++ 向右移位(除以二)
6 二进制为 0 1 1 0 为偶数 count不加 向右移位(除以二)
3 二进制为 0 0 1 1 为奇数 count++ 向右移位(除以二)
1 二进制为 0 0 0 1 为奇数 count++ 向右移位(除以二)
0 二进制为 0 0 0 0 循环结束
最后计数器count = 3 即13的二进制中1的个数为3个

相关文章
|
5月前
|
机器学习/深度学习
剑指 Offer 15:二进制中1的个数
剑指 Offer 15:二进制中1的个数
51 0
|
5月前
剑指 Offer 17:打印从1到最大的n位数
剑指 Offer 17:打印从1到最大的n位数
30 0
|
5月前
剑指 Offer 20:表示数值的字符串
剑指 Offer 20:表示数值的字符串
38 0
|
5月前
剑指 Offer 43:1~n 整数中 1 出现的次数
剑指 Offer 43:1~n 整数中 1 出现的次数
47 0
|
5月前
剑指 Offer 57 - II:和为s的连续正数序列
剑指 Offer 57 - II:和为s的连续正数序列
29 0
|
5月前
剑指 Offer 03:数组中重复的数字
剑指 Offer 03:数组中重复的数字
25 0
|
5月前
剑指 Offer 56 - I:数组中数字出现的次数
剑指 Offer 56 - I:数组中数字出现的次数
44 0
|
5月前
「LeetCode」剑指 Offer 40. 最小的k个数
「LeetCode」剑指 Offer 40. 最小的k个数
49 0
|
5月前
leetcode 剑指 Offer 40. 最小的k个数
leetcode 剑指 Offer 40. 最小的k个数
31 0