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

位运算(Bitwise Operations)深度解析

位运算(Bitwise Operations)深度解析

位运算直接操作数据的二进制位(bit),是底层编程的核心技术,在算法优化、硬件控制、密码学等领域有不可替代的作用。


🧱 核心位运算符(7种基础操作)

运算符符号逻辑说明示例(二进制)
&同1则11100 & 1010 = 1000
|有1则11100 | 1010 = 1110
异或^不同为11100 ^ 1010 = 0110
取反~0/1互换~1100 = 0011(以4位为例)
左移<<低位补0,高位丢弃1100 << 2 = 0000
右移>>高位补符号位,低位丢弃1100 >> 2 = 1111(算术右移)
无符号右移>>>高位补01100 >>> 2 = 0011(Java等)

⚡️ 实战应用场景

1️⃣ ​​算法优化​
# 奇偶判断 (比 n%2 快5倍以上)
def is_odd(n):return n & 1  # 0偶 1奇# 交换变量 (无需临时变量)
a ^= b
b ^= a
a ^= b
2️⃣ ​​状态压缩​
// 用1个int表示32个布尔状态
int state = 0; // 设置第5位为1
state |= (1 << 4);  // 检查第3位是否为0
if (!(state & (1 << 2))) { // 位2为0时的操作
}
3️⃣ ​​密码学应用​
// 简单加密(XOR加密)
byte[] encrypt(byte[] data, byte key) {for (int i = 0; i < data.length; i++) {data[i] = (byte) (data[i] ^ key); // 核心异或运算}return data;
}
4️⃣ ​​图形处理​
// 合并RGB颜色(ARGB格式)
int alpha = 0xFF << 24;     // 透明度通道
int color = (alpha) | (red << 16) | (green << 8) | blue;
5️⃣ ​​硬件控制​
// 嵌入式寄存器操作(设置第3/5位为1)
volatile uint32_t *reg = (uint32_t*)0x40021000;
*reg |= (1 << 2) | (1 << 4);  // 位或操作

🔍 进阶技巧

位运算的魔法
# 判断是否为2的幂
def is_power_of_two(n):return n > 0 and (n & (n - 1)) == 0# 计算二进制中1的个数(Brian Kernighan算法)
def count_ones(n):count = 0while n:n &= (n - 1)count += 1return count
位移的妙用
// 快速乘除(仅适用于2的幂次)
int a = 25 << 3;   // 25 * 8 = 200
int b = 64 >> 4;   // 64/16 = 4

⚠️ 注意事项

  1. ​符号位问题​​:右移时各语言处理不同(Java有>>>
  2. ​溢出风险​​:左移可能导致符号位被覆盖
  3. ​可读性折衷​​:过度使用会降低代码可读性
  4. ​位宽依赖​​:~5 在8位和32位系统中结果不同

🌐 实际应用案例

领域应用实例
RedisHyperLogLog基数统计使用位操作
Linux内核权限掩码(rwx权限控制)
游戏开发棋盘状态压缩存储
区块链Merkle树哈希计算
压缩算法LZW编码中的位打包

“位运算是程序员与计算机硬件的直接对话窗口。” —— 《深入理解计算机系统》

掌握位运算,能让你在性能优化、底层开发中拥有无可替代的优势!

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

相关文章:

  • php中实现邮件发送功能
  • 2-深度学习挖短线股1
  • JS面试常见问题——数据类型篇
  • 边缘计算网关提升水产养殖尾水处理的远程运维效率
  • 【油藏地球物理正演软件ColchisFM】浅谈ColchisFM地震正演分析在地震资料解释中的作用(四)
  • 加密狗、注册机:常见的软件加密工具介绍
  • 利用NVivo进行数据可视化,重塑定性研究
  • 基于Selenium+Python的web自动化测试框架
  • Android Camera Hal中通过Neon指令优化数据拷贝
  • 使用扩散模型解决Talking Head生成中的头像抖动问题
  • 数据结构与算法——并查集
  • curl获取ip定位信息 --- libcurl-multi(三)
  • 在线OJ项目测试
  • [蓝桥杯]搭积木
  • OD 算法题 B卷【猴子吃桃】
  • 常用操作符,操作符相关笔试题(谷歌)及算法的优化(上)
  • C++编程——关于比较器的使用
  • 1panel面板中部署SpringBoot和Vue前后端分离系统 【图文教程】
  • 深入解析YUM与DNF:RPM包管理器的架构演进与功能对比
  • 前端flex、grid布局
  • VS如何编译Zlib库
  • curl获取ip定位信息 --- libcurl-easy(二)
  • 理解非结构化文档:将 Reducto 解析与 Elasticsearch 结合使用
  • Qt生成日志与以及报错文件(mingw64位,winDbg)————附带详细解说
  • Cesium使用glb模型、图片标记来实现实时轨迹
  • 数学:数的概念是如何发展的?
  • 基于IDIG-GAN的小样本电机轴承故障诊断
  • PWN-中级ROP-[HNCTF 2022 WEEK2]ret2csu
  • 紧急调整!亚马逊70%谷歌广告预算转向新渠道
  • 引领AI安全新时代 Accelerate 2025北亚巡展·北京站成功举办