后端
C语言位运算
位运算基础
说明:常见于寄存器操作
按位与(&)
c
操作数1 & 操作数2功能描述:对两个操作数的对应位进行与操作,只有当两位都为1时结果才为1 示例:1010 & 1100 = 1000 应用场景:位掩码、判断奇偶性、清除特定位
按位或(|)
c
操作数1 | 操作数2功能描述:对两个操作数的对应位进行或操作,只要有一位为1结果就为1 示例:1010 | 1100 = 1110 应用场景:设置特定位、合并位信息
按位异或(^)
c
操作数1 ^ 操作数2功能描述:对两个操作数的对应位进行异或操作,当两位不同时结果为1 示例:1010 ^ 1100 = 0110 应用场景:交换变量、翻转特定位、加密
按位取反(~)
c
~操作数功能描述:对操作数的每一位取反,0变1,1变0 示例:~1010 = 0101(取决于数据类型长度) 应用场景:生成掩码、位取反操作
左移(<<)
c
操作数 << 位数功能描述:将操作数的所有位向左移动指定的位数,右侧补0 示例:1010 << 2 = 101000 应用场景:乘以2的幂次、位运算优化
右移(>>)
c
操作数 >> 位数功能描述:将操作数的所有位向右移动指定的位数,左侧补符号位(有符号数)或补0(无符号数) 示例:1010 >> 2 = 0010 应用场景:除以2的幂次、位运算优化
位运算优先级
| 优先级 | 运算符 | 结合性 |
|---|---|---|
| 1 | ~(按位取反) | 右到左 |
| 2 | <<, >>(左移、右移) | 左到右 |
| 3 | &(按位与) | 左到右 |
| 4 | ^(按位异或) | 左到右 |
| 5 | |(按位或) | 左到右 |
