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

算法:常见位运算技巧总结

基础位运算

按位与 & :有0为0,无0为1
按位或 | :有1为1,无1为0
按位异或 ^ :相同为1,不同为0
按位取反 ~ :0变成1,1变成0
左移 << : 二进制序列向左移
右移 >> :二进制序列向右移

一、判断一个数n的二进制表示中的第x位是0还是1

(n >> x) & 1

n >> x 将n的第x位放到最右边第0位
与1 按位与(1的二进制序列为000000…… 1)
即可判断第x位是0还是1

二、将一个数n的二进制表示中的第x位变成1

n |= (1 << x)

要将第x位变成1,需要第x位按位或1

1 << x 造出了第x位为1,其他位为0的二进制序列

三、将一个数n的二进制表示中的第x位变成0

n &= ~(1 << x)

要将第x位变成0,需要第x位按位与0

1 << x 造出了第x位为1,其他位为0的二进制序列

对该序列取反,就早出了第x位为0,其他位为1的二进制序列

四、提取一个数n的二进制表示中的最右边的1

n & (-n)

-n 的本质是将一个二进制数最右边的1的左边区域全部变成相反的数

-n = ~n + 1

eg

n = 11010001010101100000
-n = 00101110101010011111 + 1
= 00101110101010100000

五、干掉一个数n的二进制表示中的最右边的1(变成0)

n & (n - 1)

n - 1 的本质是将一个二进制数的最右边的1的右边区域(包括自己)全部取反

eg

n = 11010001010101100000
n - 1 = 11010001010101011111

六、按位异或(^) 运算律

a ^ a = 0
a ^ 0 = a
a ^ b ^ c = a ^ c ^ b


http://www.kler.cn/a/371320.html

相关文章:

  • 单片机-定时器中断
  • springboot 默认的 mysql 驱动版本
  • Kubernetes集群架构
  • Windows C++开发环境:VSCode + cmake + ninja + msvc (cl.exe) + msys2/bash shell
  • 3298. 统计重新排列后包含另一个字符串的子字符串数目 II
  • git提交
  • Dirichlet分布生成联邦学生non-iid数据
  • css实现背景色的斑马条效果
  • 如何用李萨如图形测正弦信号的频率?若不使用李萨如图形,如何用示波器测交流信号频率?
  • PHP内存马:不死马
  • 微信小程序如何实现地图轨迹回放?
  • 地球上的中国:世界地图概览
  • Go中的泛型
  • NFS服务器作业
  • Linux云计算 |【第五阶段】CLOUD-DAY1
  • 字母象形与hand的不同解构
  • 【机器学习】揭秘XGboost:高效梯度提升算法的实践与应用
  • 「C/C++」C++ 设计模式 之 单例模式(Singleton)
  • 怎么实现电脑控制100台手机,苹果手机群控系统不用越狱实现新突破
  • GitHub Actions的 CI/CD
  • 鸿蒙开发培训要多久
  • 【计算机网络教程】课程 章节测试1 计算机网络概述
  • 启明云端乐鑫一级代理商,家电设备Matter交互方案,乐鑫ESP32-S3无线技术
  • JVM 调优深度剖析:优化 Java 应用的全方位攻略(一)
  • CentOS下安装ElasticSearch7.9.2(无坑版)
  • uniapp开发【选择地址-省市区功能】,直接套用即可