C语言中的位运算通过直接操作二进制位实现高效数据处理,主要涉及以下运算符及应用:
一、核心位运算符
按位与(&) 两个对应位均为1时结果为1,否则为0。例如:`3 & 1`(二进制`0111 & 0001`)结果为`0001`(十进制1)。
按位或(|)
两个对应位中至少有一个为1时结果为1。例如:`3 | 1`(二进制`0111 | 0001`)结果为`0111`(十进制3)。
按位异或(^)
两个对应位不同时结果为1,相同时为0。例如:`3 ^ 1`(二进制`0111 ^ 0001`)结果为`0110`(十进制6)。
按位取反(~)
对每一位取反(0变1,1变0)。例如:`~3`(二进制`~0011`)结果为`1100`(十进制-4,有符号数补码表示)。
左移(<<)
将二进制位向左移动N位,高位补0。例如:`3 << 1`(二进制`0011 << 1`)结果为`0110`(十进制6)。
右移(>>)
将二进制位向右移动N位,有符号数符号位保持,无符号数高位补0。例如:`3 >> 1`(二进制`0011 >> 1`)结果为`0001`(十进制1)。
二、应用示例
奇偶判断: `num & 1`,奇数末位为1,偶数为0。 交换变量
位掩码操作:如`val &= 0377`(二进制`00100111`)保留低7位。
三、注意事项
仅支持整型(`char`、`short`、`int`、`long`)。
有符号数右移时符号位保持,无符号数高位补0。