在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 0011int 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;
}