一、概述
C++中,位操作符是一种对二进制位进行操作的运算符,用于对二进制数进行位移、与、或、异或等操作。在C++中,有6个位操作符,包括左移运算符(<<)、右移运算符(>>)、按位与运算符(&)、按位或运算符(|)、按位异或运算符(^)和按位取反运算符(~)。这些运算符可以用于整数类型的变量,例如int、char、short、long等。
二、左移和右移运算符
左移运算符(<<)将一个数的二进制位向左移动指定的位数,右边用0填充。例如,将二进制数1010左移2位后,变为101000。右移运算符(>>)将一个数的二进制位向右移动指定的位数,左边用0填充。例如,将二进制数1010右移2位后,变为10。
示例代码:
#include <iostream>
using namespace std;
int main() {
int num1 = 10; // binary: 1010
int num2 = num1 << 2; // left shift 2 bits, binary: 101000
int num3 = num1 >> 2; // right shift 2 bits, binary: 10
cout << "num2: " << num2 << endl;
cout << "num3: " << num3 << endl;
return 0;
}
三、按位与运算符
按位与运算符(&)对两个数的二进制位进行与操作,即两个相应的二进制位都为1时,结果为1,否则为0。
示例代码:
#include <iostream>
using namespace std;
int main() {
int num1 = 10; // binary: 1010
int num2 = 12; // binary: 1100
int result = num1 & num2; // result binary: 1000
cout << "result: " << result << endl;
return 0;
}
四、按位或运算符
按位或运算符(|)对两个数的二进制位进行或操作,即两个相应的二进制位中只要有一个为1时,结果为1,否则为0。
示例代码:
#include <iostream>
using namespace std;
int main() {
int num1 = 10; // binary: 1010
int num2 = 12; // binary: 1100
int result = num1 | num2; // result binary: 1110
cout << "result: " << result << endl;
return 0;
}
五、按位异或运算符
按位异或运算符(^)对两个数的二进制位进行异或操作,即两个相应的二进制位有一个为1且另一个为0时,结果为1,否则为0。
示例代码:
#include <iostream>
using namespace std;
int main() {
int num1 = 10; // binary: 1010
int num2 = 12; // binary: 1100
int result = num1 ^ num2; // result binary: 11010
cout << "result: " << result << endl;
return 0;
}
六、按位取反运算符
按位取反运算符(~)对一个数的二进制位进行取反操作,即把每个二进制位上的1变为0,0变为1。
示例代码:
#include <iostream>
using namespace std;
int main() {
int num1 = 10; // binary: 1010
int result = ~num1; // result binary: 0101
cout << "result: " << result << endl;
return 0;
}
七、位操作符的优先级和结合性
在C++中,位操作符的优先级比较低,低于加减乘除等算术运算符,但高于赋值运算符。位操作符的结合性是从左到右,即先对左边的操作数进行操作,再对右边的操作数进行操作。
示例代码:
#include <iostream>
using namespace std;
int main() {
int num1 = 10; // binary: 1010
int num2 = 12; // binary: 1100
int result = (num1 & num2) | (num1 ^ num2); // result binary: 11110
cout << "result: " << result << endl;
return 0;
}