0
点赞
收藏
分享

微信扫一扫

[C语言][剑指offer篇]--二进制中1的个数

kmoon_b426 2022-02-20 阅读 58

题目描述

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



理清思路

  运用 & 位运算和移位运算来判断输入整数的每一个二进制位是否为1。但首先需要了解实际系统是32位还是64位。

代码实现

int hammingWeight(uint32_t n) {
    
    int count = 0;
    int i = 0;

    for(i = 0; i < 32; i++)
    {
        if(n & (1u<<i))
        {
            count++;
        }
    }

    return count;
}

 记得1后面需要加u表示无符号存储,在C语言中类似的还有:

在此题中为什么要在1后面加u呢?因为在32位系统中,有符号整数二进制的第31位表示符号位,左移的位数不允许超过整数本身的位数,否则会出现以下错误:

看到一篇文章总结左移右移的原理,觉得不错:
https://blog.csdn.net/zj01jx/article/details/119451759
在这里插入图片描述

举报

相关推荐

0 条评论