在C++中,位运算是对二进制位进行操作的运算,主要有以下几种:
1. 按位与( & ):两个操作数对应位都为1时,结果位才为1,否则为0。例如 3 & 5 , 3 二进制是 0000 0011 , 5 二进制是 0000 0101 ,运算结果为 0000 0001 ,即十进制的 1 。常用于获取某些位的值或屏蔽某些位。
2. 按位或( | ):两个操作数对应位只要有一个为1,结果位就为1,都为0时结果位才为0。如 3 | 5 ,结果是 0000 0111 ,即十进制 7 。可用于将某些位置为1。
3. 按位异或( ^ ):两个操作数对应位不同时,结果位为1,相同时为0。比如 3 ^ 5 ,结果是 0000 0110 ,即十进制 6 。可实现不使用临时变量交换两个数,如 a = a ^ b; b = a ^ b; a = a ^ b; 。
4. 按位取反( ~ ):将操作数的每一位取反,1变0,0变1。如 ~3 , 3 二进制 0000 0011 ,取反后是 1111 1100 ,在有符号数中表示 -4 。
5. 左移( << ):将操作数的二进制位向左移动指定的位数,右侧补0。如 3 << 2 , 3 二进制 0000 0011 ,左移2位后是 0000 1100 ,即十进制 12 ,相当于乘以 2 的移动位数次方。
6. 右移( >> ):将操作数的二进制位向右移动指定的位数,对于无符号数,左侧补0;对于有符号数,取决于编译器,有的补符号位(算术右移),有的补0(逻辑右移)。如 4 >> 1 , 4 二进制 0000 0100 ,右移1位后是 0000 0010 ,即十进制 2 ,相当于除以 2 。
以下是C++中各种位运算的示例代码,展示了按位与、按位或、按位异或、按位取反、左移和右移的用法:
#include <iostream>
using namespace std;
int main() {
// 定义两个整数
int a = 3; // 二进制表示为 0000 0011
int b = 5; // 二进制表示为 0000 0101
// 按位与运算
int andResult = a & b;
cout << "按位与运算结果: " << andResult << endl;
// 按位或运算
int orResult = a | b;
cout << "按位或运算结果: " << orResult << endl;
// 按位异或运算
int xorResult = a ^ b;
cout << "按位异或运算结果: " << xorResult << endl;
// 按位取反运算
int notResult = ~a;
cout << "按位取反运算结果: " << notResult << endl;
// 左移运算
int leftShiftResult = a << 2;
cout << "左移运算结果: " << leftShiftResult << endl;
// 右移运算
int rightShiftResult = a >> 1;
cout << "右移运算结果: " << rightShiftResult << endl;
return 0;
}