c++位运算
C中的位运算符用于对二进制数进行操作。以下是C中的位运算符:
按位与(&):两个操作数的每一位都为1时,结果为1,否则为0。
按位或(|):两个操作数的每一位都为0时,结果为0,否则为1。
按位异或(^):两个操作数的每一位相同时,结果为0,否则为1。
按位取反(~):对操作数的每一位取反。
左移(<<):将操作数的二进制数向左移动指定的位数,右侧用0填充。
右移(>>):将操作数的二进制数向右移动指定的位数,左侧用符号位填充。
以下是一些位运算的示例:
int a = 5; // 二进制表示为 0101
int b = 3; // 二进制表示为 0011
int c = a & b; // c的值为 1,二进制表示为 0001
int d = a | b; // d的值为 7,二进制表示为 0111
int e = a ^ b; // e的值为 6,二进制表示为 0110
int f = ~a; // f的值为 -6,二进制表示为 1111 1011
int g = a << 2; // g的值为 20,二进制表示为 10100
int h = b >> 1; // h的值为 1,二进制表示为 0001
注意,位运算符只能用于整数类型,包括char、short、int、long和long long。
除了上面提到的位运算符,C++还提供了一些其他的位运算符,如下所示:
&=:按位与赋值运算符,相当于a = a & b。
|=:按位或赋值运算符,相当于a = a | b。
^=:按位异或赋值运算符,相当于a = a ^ b。
<<=:左移赋值运算符,相当于a = a << b。
=:右移赋值运算符,相当于a = a >> b。
这些位运算符可以用于对变量进行位运算操作,并将结果赋值给变量。例如:
int a = 5; // 二进制表示为 0101
int b = 3; // 二进制表示为 0011
a &= b; // a的值为 1,二进制表示为 0001
b |= a; // b的值为 3,二进制表示为 0011
a ^= b; // a的值为 2,二进制表示为 0010
b <<= 2; // b的值为 12,二进制表示为 1100
a >>= 1; // a的值为 1,二进制表示为 0001
除了基本的位运算符和赋值运算符,C++还提供了一些其他的位运算函数,如下所示:
bitset:用于创建一个二进制位集合,并对其进行位运算操作。
bitset::count:用于计算一个二进制位集合中1的个数。
bitset::to_ulong:用于将一个二进制位集合转换为unsigned long类型。
这些函数可以用于更高级的位运算操作,例如:
#include <bitset>
#include <iostream>
int main() {
std::bitset<8> a("01010101");
std::bitset<8> b("00110011");
std::bitset<8> c = a & b;
std::cout << c << std::endl; // 输出 00010001
int count = c.count();
std::cout << count << std::endl; // 输出 2
unsigned long d = c.to_ulong();
std::cout << d << std::endl; // 输出 17
return 0;
}
这个示例中,我们使用了std::bitset类来创建一个二进制位集合,并对其进行按位与运算、计算1的个数和转换为unsigned long类型。