📅  最后修改于: 2023-12-03 15:29:52.989000             🧑  作者: Mango
在 C++ 中,可以使用位操作符(&、|、^、~、<<、>>)来操作二进制数。这些位操作符能够在二进制中改变单个位或一组位,它们的效率通常比其他算法高。
下面是6个基本的位操作符:
& 按位与运算符:对于每个比特位,只有两个操作数相应的比特位都为 1 时,结果才为 1,否则为 0。
| 按位或运算符:对于每个比特位,两个操作数相应的比特位有一个或两个都为 1 时,结果才为 1,否则为 0。
^ 按位异或运算符:对于每个比特位,两个操作数相应的比特位有一个而仅有一个为 1 时,结果为 1,否则为 0。
~ 按位取反运算符:用于反转二进制数中的所有比特位。
<< 左移位运算符:将左操作数向左移动指定位数,右边用 0 填充。
右移位运算符:将左操作数向右移动指定位数,左边用原来的最高位填充。
下面是一个例子,演示如何使用位操作符在 C++ 中设置二进制数的第 48 个比特位(即二进制数中的第 49 个数位)。
#include <iostream>
using namespace std;
int main()
{
long long n = 123456789987654321; // 二进制数:1011010111100110101101110001110011110010111101011001000000100001
long long mask = 1LL << 48; // 创建一个掩码,二进制数:1000000000000000000000000000000000000000000000000
n |= mask; // 将掩码应用到 n 上,设置第 48 个比特位
cout << n << endl; // 输出新的二进制数,1011010111100110101101110001110011110010111101011100100000100001
return 0;
}
首先,创建一个长整型变量 n,其二进制形式为 1011010111100110101101110001110011110010111101011001000000100001。
然后,创建一个掩码变量 mask,使用左移位运算符将数字 1 移动 48 位,得到二进制数:1000000000000000000000000000000000000000000000000。
最后,使用按位或赋值运算符将掩码应用到 n 变量上,将第 48 个比特位设置为 1。
输出结果为新的二进制数:1011010111100110101101110001110011110010111101011100100000100001。
C++ 中的位操作符为程序员提供了对二进制数的高效控制。使用按位运算符能够实现在二进制数中改变单个比特或一组比特的操作。