C++中的位运算符主要用于对二进制位进行操作。以下是一些常见的C++位运算及其应用:
-
按位与(&):当两个相应的二进制位都为1时,结果为1,否则为0。应用场景包括:
- 判断奇偶性:通过将数字与1进行按位与操作,如果结果为1,则数字为奇数;如果结果为0,则数字为偶数。
- 提取某些位:通过按位与操作和掩码,可以提取数字的某些位。
-
按位或(|):当两个相应的二进制位有一个为1时,结果为1,否则为0。应用场景包括:
- 设定某些位:通过按位或操作和掩码,可以将数字的某些位设置为1。
-
按位异或(^):当两个相应的二进制位不同时,结果为1,否则为0。应用场景包括:
- 切换某些位:通过按位异或操作和掩码,可以切换数字的某些位。
- 两数交换:不需要额外的变量就可以交换两个数的值。
-
按位取反(~):将数字的二进制位全部取反,即1变为0,0变为1。应用场景包括:
- 求反码:按位取反可以得到一个数的按位取反码,用于纠错编码等。
-
左移(<<):将数字的二进制位向左移动指定的位数,右边空出的位用0填充。应用场景包括:
- 乘法:将数字左移n位等于将该数字乘以2^n。
-
右移(>>):将数字的二进制位向右移动指定的位数,对于无符号数,左边空出的位用0填充;对于有符号数,行为依赖于具体的实现(逻辑右移或算术右移)。应用场景包括:
- 除法:将数字右移n位等于将该数字除以2^n。
- 求余数:对于无符号数,将数字右移n位等于将该数字除以2^n的余数。
-
位计数(__builtin_popcount):计算一个整数中设置为1的二进制位的数量。应用场景包括:
- 统计字符出现的次数:例如,统计字符串中某个字符出现的次数。
-
位掩码(bitmask):使用按位与、按位或、按位异或等操作对数字进行位级操作,以实现特定的功能。应用场景包括:
- 文件权限控制:使用位掩码表示文件的读、写、执行权限。
- 压缩存储:使用位掩码表示颜色信息,以节省存储空间。