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

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

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 位
}

 

相关文章:

  • 建筑IT数字化突围:建筑设计企业的生存法则重塑
  • STM32入门笔记(05):内部高速8Mhz时钟最大时钟可以设置 64 Mhz?如何修改system_stm32f10x.c里面的代码?
  • 基于OAuth2+SpringSecurity+Jwt实现身份认证和权限管理后端服务
  • 操作系统-物理结构
  • 最大子段和(就是之前总结线性dp思想)
  • “小显存”也能启动大模型
  • libmemcached库api接口讲解三
  • 可视化图解算法39: 输出二叉树的右视图
  • 前端表格滑动滚动条太费事,做个浮动滑动插件
  • synchronized关键字详解
  • 有关多线程
  • 总共76dp 空出20dp然后放一个控件的写法
  • Spring 中的 @ComponentScan注解详解
  • Android Framework学习五:APP启动过程原理及速度优化
  • Redis内存淘汰策略和过期键删除策略有哪些?
  • TAOCMS漏洞代码学习及分析
  • 微信开发者工具里面模拟操作返回、录屏、网络速度、截屏等操作
  • 企业级IP代理解决方案:负载均衡与API接口集成实践
  • 【CUDA】Sgemm单精度矩阵乘法(上)
  • 达梦数据库 【-6111: 字符串转换出错】问题处理
  • 视频丨中国海警成功救助8名外籍遇险渔民,韩方向中方致谢
  • 上海市国防动员办公室副主任吴斌接受审查调查
  • 国台办:实现祖国完全统一是大势所趋、大义所在、民心所向
  • 宝通科技:与宇树合作已签约,四足机器人在工业场景落地是重点商业化项目
  • 国产水陆两栖大飞机AG600批产首架机完成总装下线
  • 挖掘机4月销量同比增17.6%,出口增幅创近两年新高