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

【位运算】常见算法公式使用

1. 基本位运算符

运算符描述示例(二进制)
&按位与1010 & 1100 = 1000
|按位或1010 | 1100 = 1110
^按位异或1010 ^ 1100 = 0110
~按位取反~1010 = 0101(结果依赖位数)
<<左移1010 << 2 = 101000
>>右移(算术/逻辑)1010 >> 2 = 0010(逻辑右移)

2. 常见位运算技巧

① 判断奇偶
  • x & 1:结果为 1 是奇数,0 是偶数。

② 交换两个数
  • 不用临时变量:

    a ^= b;  // a = a ^ b
    b ^= a;  // b = b ^ (a ^ b) = a
    a ^= b;  // a = (a ^ b) ^ a = b
③ 取最低位的 1
  • x & (-x):获取二进制中最右边的 1(如 1010 → 0010)。

④ 清除最低位的 1
  • x & (x - 1):将最右边的 1 置 0(如 1010 → 1000)。

    • 应用:统计二进制中 1 的个数:

      int count = 0;
      while (x) {x &= (x - 1);count++;
      }
⑤ 判断是否为 2 的幂
  • x & (x - 1) == 0:若为 true,则 x 是 2 的幂(如 1000)。

⑥ 确定某一位是 0 还是 1
int getBit(int num, int x) {return (num >> x) & 1;  // 将第 x 位移到最低位后取末位
}
⑦ 将某一位修改为 1
int setBit(int num, int x) {return num | (1 << x);  // 用或操作设置第 x 位
}
⑧ 将某一位修改为 0
int clearBit(int num, int x) {return num & ~(1 << x);  // 用与操作清零第 x 位
}

 

http://www.xdnf.cn/news/6120.html

相关文章:

  • 360智语:以全栈技术重塑企业级智能体开发新标杆
  • 银行卡真伪验证助力金融合规-银行卡实名认证接口
  • 电机的导程和脉冲之间的关系
  • Ansible Roles 是一种用于层次化和结构化组织 Ansible Playbook 的机制。
  • SVG 知识详解:从入门到精通
  • 鸿蒙5.0项目开发——鸿蒙天气项目的实现(主页1)
  • 《Effective Python》第2章 字符串和切片操作——Python 字符串格式化的现代选择f-strings
  • Python 之 Flask 入门学习
  • 《P4391 [BalticOI 2009] Radio Transmission 无线传输 题解》
  • 完整的 CentOS 6.10 虚拟机安装启动脚本
  • spark中的转换算子
  • 易学探索助手-项目记录(九)
  • HTTP GET报文解读
  • 学习机器学习的体会与姓名性别预测案例分析
  • CMakeLists生成调用静态动态库可执行demo
  • 论语详解---缠中说禅(整理)
  • 通义千问-langchain使用构建(一)
  • ChromeDriver进程泄漏问题分析与最佳实践解决方案
  • 排序算法详解
  • Electron入门指南:用前端技术打造桌面应用
  • Socket API 核心函数详解
  • 一文了解 HTTP Content-Type:从基础到实战
  • 第六天——贪心算法——字符串分隔
  • 【C++】模板(初阶)
  • 从lightrag的prompt到基于openai Structured Outputs 的优化实现思路
  • 虚幻引擎5-Unreal Engine笔记之摄像机与场景捕获相关概念的解析
  • C语言学习之文件操作
  • HTTP / HTTPS 协议
  • Nginx 动静分离在 ZKmall 开源商城静态资源管理中的深度优化
  • LVDS系列12:Xilinx Ultrascale系可编程输入延迟(二)