今回は、C#のビット演算子について解説していきます。
目次
スポンサーリンク
ビット演算子とは?
ビット演算子は、コンピュータープログラム内でビット(0と1の二進数で表される最小の情報単位)を操作するための演算子です。
これらの演算子は、整数の二進数表現に対してビット単位で操作を行うのに使用されます。
ビット演算子の種類
ビット演算子には以下の種類があります。
ビット演算子の種類 | C#コード | 役割 |
---|---|---|
AND(論理積) | &(アンパサンド) | 2つのビットが1の場合、結果は1になります。それ以外の場合、結果は0です。 例: 1010 & 1100 = 1000 |
OR(論理和) | |(パイプ) | 2つのビットのうち、少なくとも1つが1の場合、結果は1になります。両方が0の場合、結果は0です。 例: 1010 | 1100 = 1110 |
XOR(排他的論理和) | ^(キャレット) | 2つのビットが異なる場合、結果は1になります。同じ場合、結果は0です。 例: 1010 ^ 1100 = 0110 |
NOT(ビット反転) | ~(チルダ) | ビットを反転させ、1を0に、0を1に変えます。 例: ~1010 = 0101 |
左シフト | << | 指定されたビット数だけ左にビットをシフトします。右側には0が追加されます。 例: 1010 << 2 = 0010 |
右シフト | >> | 指定されたビット数だけ右にビットをシフトします。左側には符号ビット(最上位ビット)の値が追加される場合があります。 例: 1010 >> 2 = 0010 |
ビット演算子を使ったサンプルコード
C#のビット演算子を使ってサンプルコードをいくつか紹介します。
AND(論理積)/OR(論理和)/XOR(排他的論理和)/NOT(ビット反転)を使ったサンプルコード
サンプルコード
// See https://aka.ms/new-console-template for more information
int num1 = 12; // 2進数表示で1100
int num2 = 6; // 2進数表示で0110
Console.WriteLine("num1の2進数表示: " + Convert.ToString(num1, 2));
Console.WriteLine("num2の2進数表示: " + Convert.ToString(num2, 2) + Environment.NewLine);
int result = num1 & num2; // ビットAND演算
Console.WriteLine("ビットANDの結果: " + result); // 結果は 4 (2進数表示で0100)
Console.WriteLine("2進数表示: " + Convert.ToString(result, 2) + Environment.NewLine);
result = num1 | num2; // ビットOR演算
Console.WriteLine("ビットORの結果: " + result); // 結果は 14 (2進数表示で1110)
Console.WriteLine("2進数表示: " + Convert.ToString(result, 2) + Environment.NewLine);
result = num1 ^ num2; // ビットXOR演算
Console.WriteLine("ビットXORの結果: " + result); // 結果は 10 (2進数表示で1010)
Console.WriteLine("2進数表示: " + Convert.ToString(result, 2) + Environment.NewLine);
result = ~num1; // ビットNOT演算
Console.WriteLine("ビットNOTの結果: " + result); // 結果は -13 (2進数表示で-1101)
Console.WriteLine("2進数表示: " + Convert.ToString(result, 2) + Environment.NewLine);
実行結果
num1の2進数表示: 1100
num2の2進数表示: 110
ビットANDの結果: 4
2進数表示: 100
ビットORの結果: 14
2進数表示: 1110
ビットXORの結果: 10
2進数表示: 1010
ビットNOTの結果: -13
2進数表示: 11111111111111111111111111110011
左シフト/右シフトを使ったサンプルコード
左シフト<<
、右シフト>>
を使ったサンプルコードはこちら。
サンプルコード
int number = 10; // 10の2進数表現は 1010
Console.WriteLine("2進数表示: " + Convert.ToString(number, 2));
// 左シフトして値を2倍にする
int leftShifted = number << 1; // 1010 << 1 = 10100 (10進数では20)
Console.WriteLine("左シフト結果: " + leftShifted);
Console.WriteLine("2進数表示: " + Convert.ToString(leftShifted, 2));
// 右シフトして値を半分にする
int rightShifted = number >> 1; // 1010 >> 1 = 101 (10進数では5)
Console.WriteLine("右シフト結果: " + rightShifted);
Console.WriteLine("2進数表示: " + Convert.ToString(rightShifted, 2));
Console.ReadLine();
実行結果
2進数表示: 1010
左シフト結果: 20
2進数表示: 10100
右シフト結果: 5
2進数表示: 101
int型の配列を直接、左右にビットシフトさせることができました。
コメント