当前位置: 首页 > news >正文

位运算的应用

1. 判断偶数,判断最低位是0还是1即可,⽐求模快

        x % 2 != 0 //x正负都可以判断;不⽤x%2 == 1,因为如果x为负奇数,x%2=-1

        (x & 0x1) == 0

        例如:

        int x;

        int main()

        {

           cin>>x;

           if((x & 0x1)==0) cout<<"yes"; 

           else cout<<"no";

           return 0;

        }

2.两个数的交换

    a = a^b;//a变为⼀个相同为0,相异为1的结果 

    b = a^b;//该结果和b做运算,得到原来的

    a = a^b;//该结果和a做运算,得到原来的b

再来个实例说明下以加深印象。int a = 13, b = 6;

    a的⼆进制为1101(⼆进制)

    b的⼆进制为 110(⼆进制)

    第⼀步 a^=b a = 1101 ^ 110 = 1011;

    第⼆步 b^=a b = 110 ^ 1011 = 1101;即b=13

    第三步 a^=b a = 1011 ^ 1101 = 110;即a=6

3.lowbit运算

    lowbit 运算 是位运算中比较重要的运算方式,用于计算一个二进制数最低位的1。

    lowbit 即二进制数最低位1所对应的值。

    如,二进制数 0b01011000最低的 1是在第3位,对应值为0b1000,即8。

  

位运算的应用.png

lowbit运算的实现

一个数的lowbit值,即一个数的最低位,可通过如下操作取出,复杂度为 O(1):

假设原来的数是a,对a取反加1得到~a+1,原数a和~a+1进行位与操作,就得到了lowbit值,即lowbit(a) = a & (~a + 1)。

   

位运算的应用1.png

当这个数是0,没有最低位1的时候,结果为0。

因为取反加1就是一个数的相反数的补码,因为lowbit也写作 lowbit(a)=a&(-a)

一个数消去它的lowbit位,由上面的lowbit求法,直接减去它的lowbit值即可。

即 a-(a&-a)也可以由a&(a-1)得到

  

位运算的应用2.png

4.求整数的⼆进制表⽰中1的个数,不⽤⼀个⼀个的移位判断

    #include <bits/stdc++.h>

    using namespace std;

    int x,cnt;

    int main()

    {

       cin>>x;

       while(x!=0)

       {

       cnt++;

       x&=x-1;//将最右边的1置为0;正负都可计算,负数是按照补码计算的,最后的符号位也被统计

       } 

       cout<<cnt;

       return 0;

    }

5.判断一个数是否2的N次⽅次

    题⽬要求:⽤⼀个表达式,判断⼀个数X是否是2的N次⽅,即2,4,8,16……等,要求不可以⽤循环语句。

    解析:2,4,8,16这样的数转化成⼆进制是10,100,1000,10000。

    如果X减去1后(低⼀位并且⼆进制的每⼀位都是1),这个数与X做与运算,答案若是0,则X是2的N次⽅。

    所以答案是:!(x&(x-1))

    即可写成:if !(x&(x-1)) cout<<"yes"

相关文章:

  • 数据结构——算法复杂度
  • Linux系统安装PaddleDetection
  • 棋类游戏中的智能决策 ——蒙特卡洛树搜索(MCTS)算法解析
  • C# 反射
  • SpringMVC——第7章:HttpMessageConverter
  • 数学复习笔记 2
  • GoogleTest:GMock初识
  • AVL树 和 红黑树 的插入算法
  • 政务服务智能化改造方案和案例分析
  • 浔川AI测试版内测报告
  • 无重复字符的最长子串(3)
  • 第三章 - 软件质量工程体系
  • JAVA在线考试系统考试管理题库管理成绩查询重复考试学生管理教师管理源码
  • QTtricks
  • 神经网络开发实战:从零基础到企业级应用(含CNN、RNN、BP网络代码详解)
  • 开源PDF解析工具Marker深度解析
  • Python-numpy中ndarray对象创建,数据类型,基本属性
  • 2025年企业Radius认证服务器市场深度调研:中小企业身份安全投入产出比最优解
  • 基于CBOW模型的词向量训练实战:从原理到PyTorch实现
  • MySQL基础关键_008_DDL 和 DML(一)
  • 让党的理论“飞入寻常百姓家”,他如何做到有新意?
  • 解锁川北底色密码,“文化三地”志愿宣讲员招募计划启动报名
  • 文旅局局长回应游客住家里:“作为一个宣恩市民我也会这么做”
  • 新加坡执政党人民行动党在2025年大选中获胜
  • “特朗普效应”下澳大利亚执政工党赢得大选,年轻选民担忧房价
  • 长三角铁路今日预计发送418万人次,持续迎来出行客流高峰