[蓝桥杯习题]———位运算、判断二进制1个数

在这里插入图片描述

⭐Hello!这里是欧_aita的博客。
⭐今日语录:行动胜过一切。
⭐个人主页:欧_aita
ψ(._. )>⭐个人专栏:
数据结构与算法(内含蓝桥杯习题)
MySQL数据库

[蓝桥杯习题]———位运算、判断二进制1个数_第1张图片

在这里插入图片描述

位运算

  • 位运算
    • 位运算的定义
    • 简单运用
  • 实战刷题
    • 题目
    • 思路
    • 代码实现
      • 声明
      • 减1过程

位运算

位运算的定义

位运算是指在二进制位级别上对数据进行操作的一种计算机运算方式。这种运算通常直接操作二进制位,通过一组针对位的操作符来完成。在许多计算机体系结构中,位运算是高效的,因为它们可以直接映射到底层的处理器指令。

简单运用

输出一个数的二进制表达数字。需要注意(n >> i & 1)是按照比特为单位进行位移的。

#include
using namespace std;

int main()
{
    int n=10;
    for(int i=3;i>=0;i--)cout<<( n >> i & 1);
    return 0;
}

[蓝桥杯习题]———位运算、判断二进制1个数_第2张图片

实战刷题

题目

任给一个数,求二进制数中1的个数?

思路

可以使用位运算的方法,在学习计算机基础时,我们就学过一个正数的补码+1就是该数的负数。所以将要求的数&上此数的负数,得出来的结果再减一遍,直到减到0为止,此过程使用一个res计数器计数,最后的res就是结果。

话不多说,上图解
[蓝桥杯习题]———位运算、判断二进制1个数_第3张图片
这样每次都是从右向左寻找1。

代码实现

声明

#include 
using  namespace std;

减1过程

int lowbit(int x)
{
    return x & -x;
}

int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        int m;
        int res=0;
        cin>>m;
        while(m)m -= lowbit(m);
        res++;
    }
    return 0;
}

最后输出的res就是1的个数。
这篇文章就到此结束了,如果对你有所帮助,就留下你的赞吧!
在这里插入图片描述

你可能感兴趣的:(数据结构与算法,蓝桥杯,算法)