Course playlist
位运算完全教程
掌握与(&)、或(|)、非(~)、异或(^)、左移(<<)、右移(>>)的基本使用方法及原理
位运算简介
位运算是对整数在二进制表示下的位进行操作的运算。这些运算直接在二进制位级别上操作,因此执行速度非常快,是底层编程、系统开发和算法优化中的重要工具。
为什么需要位运算?
- 高效性:位运算是处理器直接支持的最基本操作,速度极快
- 节省空间:可以用单个整数的不同位存储多个布尔值
- 算法优化:许多算法问题可以通过位运算巧妙解决
- 底层开发:操作系统、驱动程序、嵌入式系统开发中广泛应用
位运算主要应用于:权限控制、状态标记、数据压缩、加密算法、图形处理、游戏开发等领域。
与运算 (&)
定义:与运算对两个操作数的每一位进行逻辑与操作。只有当两个对应位都为1时,结果位才为1,否则为0。
与运算的真值表
| A | B | A & B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
与运算的特性
- 清零特定位:用0与任何位相与,结果都是0
- 保留特定位:用1与任何位相与,保留原值
- 判断奇偶性:n & 1 结果为1表示n是奇数,0表示n是偶数
- 提取最低位:n & -n 可以提取n的最低有效位
与运算示例
例子1:5 & 3 的计算
例子2:使用与运算判断奇偶性
应用场景:
- 权限检查:检查用户是否具有特定权限
- 掩码操作:提取或清除数据中的特定位
- 判断整数奇偶性
或运算 (|)
定义:或运算对两个操作数的每一位进行逻辑或操作。只要两个对应位中有一个为1,结果位就为1,否则为0。
或运算的真值表
| A | B | A | B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
或运算的特性
- 设置特定位为1:用1与任何位相或,结果都是1
- 保留特定位:用0与任何位相或,保留原值
- 组合标志位:将多个标志位合并到一个整数中
- 向上取整到2的幂:n | (n-1) 可以将n向上取整到最近的2的幂减1
或运算示例
例子1:5 | 3 的计算
例子2:使用或运算设置权限标志
非运算 (~)
定义:非运算是单目运算符,对操作数的每一位进行取反操作。0变为1,1变为0。在补码表示中,~n = -(n+1)。
非运算的特性
- 位取反:每个二进制位取反(0变1,1变0)
- 补码关系:在补码表示中,~n = -(n+1)
- 创建掩码:常用于创建位掩码
- 交换符号:~n + 1 = -n(对于整数)
非运算示例
例子1:~5 的计算(假设8位)
例子2:使用非运算创建掩码
注意事项:
- 非运算的结果取决于整数的位数(8位、16位、32位、64位)
- 在不同编程语言中,非运算的行为可能略有不同
- 非运算经常与与运算结合使用来清除特定位
异或运算 (^)
定义:异或运算对两个操作数的每一位进行逻辑异或操作。当两个对应位不同时,结果位为1,相同时为0。
异或运算的真值表
| A | B | A ^ B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
异或运算的特性
- 交换律:a ^ b = b ^ a
- 结合律:(a ^ b) ^ c = a ^ (b ^ c)
- 自反性:a ^ a = 0
- 与0异或:a ^ 0 = a
- 交换两个数:a ^= b; b ^= a; a ^= b; 可以不用临时变量交换两个整数
异或运算示例
例子1:5 ^ 3 的计算
例子2:使用异或交换两个数
应用场景:
- 加密算法:简单加密/解密
- 校验和:数据完整性检查
- 找不同:在一组成对出现的数字中找出单独出现的数字
- 图形处理:实现反色效果
移位运算 (<< 和 >>)
定义:移位运算将二进制数的所有位向左或向右移动指定的位数。左移(<<)在右侧补0,右移(>>)的行为取决于具体实现(逻辑右移或算术右移)。
左移运算 (<<)
- 定义:将所有位向左移动,右侧补0
- 数学意义:n << m 相当于 n × 2ᵐ
- 溢出:左移可能导致高位丢失,产生溢出
- 快速乘法:左移1位相当于乘以2
右移运算 (>>)
- 逻辑右移:左侧补0,不考虑符号位(无符号数)
- 算术右移:左侧补符号位(有符号数,保持符号不变)
- 数学意义:n >> m 相当于 n ÷ 2ᵐ(向零取整)
- 快速除法:右移1位相当于除以2(向下取整)
移位运算示例
例子1:5 << 2 的计算
例子2:20 >> 2 的计算
例子3:-8 >> 2 的计算(算术右移)
应用场景:
- 快速乘除:乘以或除以2的幂次
- 位字段操作:提取或设置特定位
- 颜色操作:提取RGB颜色分量
- 哈希算法:许多哈希函数使用移位运算
位运算实战应用
1. 权限控制系统
使用位运算实现简单的权限控制:
2. 判断2的幂
判断一个正整数n是否为2的幂:
3. 统计二进制中1的个数
使用n & (n-1)技巧:
位运算测试题
1. 表达式 12 & 5 的结果是多少?
2. 下列哪个表达式可以将整数n的最低有效位1清零?
3. 不使用临时变量,交换a和b的值,正确的位运算方法是什么?
位运算计算器
使用下面的工具进行位运算计算:
| 题目 | 对/错/率 | 难度 | 记录 | 通过 |
|---|
| 姓名 | 分数 | 提交时间 | 操作 |
|---|