c++のビット演算子のやり方
C++では、ビット演算子を使って2進数に対して演算を行います。以下、C++でよく使われるビット演算子とその演算規則を紹介します。
- AND演算子(&):2つのオペランドの各ビットに対して、AND演算を実行します。対応するビットが両方とも1の場合は結果は1、そうでなければ0になります。
- OR演算子(|):2つのオペランドの各ビットに対してOR演算を行い、対応するビットのいずれかが1であれば結果は1となり、それ以外は0となる。
- 排他的論理和演算子(^): 2つのオペランドの各ビットに対しいわゆる排他的論理和演算を行います。つまり、対応するビットが異なるときは1、そうでないときは0。
- NOT演算子(~):オペランドの各ビットを反転し、1を0に、0を1にする。
- 左シフト演算子(<<):オペランドのビット列を指定したビット数だけ左にシフトし、左端からはみ出たビットは無視され、右端には0が埋められます。
- 右シフト演算子(>>):オペランドのビット列を指定されたビット数右へ移動させる。右からあふれた分は捨てられ、左のビットは符号ビットで埋められる。
いくつかの例を以下に示します。
#include <iostream>
using namespace std;
int main() {
int a = 5; // 二进制表示为 00000101
int b = 3; // 二进制表示为 00000011
int c = a & b; // 与运算,结果为 00000001,即1
int d = a | b; // 或运算,结果为 00000111,即7
int e = a ^ b; // 异或运算,结果为 00000110,即6
int f = ~a; // 非运算,结果为 11111010,即-6
int g = a << 2; // 左移2位,结果为 00010100,即20
int h = b >> 1; // 右移1位,结果为 00000001,即1
cout << "c: " << c << endl;
cout << "d: " << d << endl;
cout << "e: " << e << endl;
cout << "f: " << f << endl;
cout << "g: " << g << endl;
cout << "h: " << h << endl;
return 0;
}
結果を出力します
c: 1
d: 7
e: 6
f: -6
g: 20
h: 1
ビット演算子は整数型のみ有効で、浮動小数点型には使用できません