C#のビット演算子とは?種類と使い方をサンプルコード付きで解説
ビット演算子は、数値を構成する個々のビットに対して直接演算を行うための演算子です。C#では、論理演算とシフト演算を合わせて6種類のビット演算子が用意されており、フラグ管理やパフォーマンスが求められる処理などで活用されます。
C#の主なビット演算子一覧
各ビット演算子の動作は以下のとおりです(例では A = 60、B = 13 を使用しています)。
| 演算子 | 説明 | 使用例 |
|---|---|---|
| & | 二項AND演算子。両方のオペランドで対応するビットが1の場合のみ、そのビットを結果にコピーします。 | (A & B) = 12(0000 1100) |
| | | 二項OR演算子。どちらか一方のオペランドでビットが1になっていれば、そのビットを結果にコピーします。 | (A | B) = 61(0011 1101) |
| ^ | 二項XOR演算子。対応するビットが片方だけ1になっている場合に、そのビットを結果にコピーします。 | (A ^ B) = 49(0011 0001) |
| ~ | 単項の補数演算子。すべてのビットを反転させます。符号付き整数は2の補数で表現されるため、結果は負の数になります。 | (~A) = -61(1100 0011) |
| << | 左シフト演算子。左オペランドの値を、右オペランドで指定したビット数だけ左へ移動させます。 | A << 2 = 240(1111 0000) |
| >> | 右シフト演算子。左オペランドの値を、右オペランドで指定したビット数だけ右へ移動させます。 | A >> 2 = 15(0000 1111) |
次のサンプルコードは、C#でこれらのビット演算子を実際に使用する方法を示したものです。
サンプルコード
using System;
namespace Demo {
class Program {
static void Main(string[] args) {
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a & b; /* 12 = 0000 1100 */
Console.WriteLine("c の値: {0}", c);
c = a | b; /* 61 = 0011 1101 */
Console.WriteLine("c の値: {0}", c);
c = a ^ b; /* 49 = 0011 0001 */
Console.WriteLine("c の値: {0}", c);
c = ~a; /* -61 = 1100 0011 */
Console.WriteLine("c の値: {0}", c);
c = a << 2; /* 240 = 1111 0000 */
Console.WriteLine("c の値: {0}", c);
c = a >> 2; /* 15 = 0000 1111 */
Console.WriteLine("c の値: {0}", c);
Console.ReadLine();
}
}
}
実行結果
c の値: 12 c の値: 61 c の値: 49 c の値: -61 c の値: 240 c の値: 15
このように、& や | は対応するビット同士を比較して新しい値を生成し、<< や >> はビット列を左右にずらすことで、乗算や除算に似た効果を得ることもできます。特に ~ 演算子については、符号付き整数が2の補数として表現されるため、60の全ビットを反転すると -61 になる点に注意してください。
-
C#の関係演算子とは?種類と使い方を実例付きで解説
C#で2つの値を比較する際に使用するのが関係演算子です。関係演算子を使うことで、数値や変数同士の等価性・大小関係を判定し、その結果に応じてプログラムの処理を分岐させることができます。 C#の主な関係演算子一覧 演算子説明==2つのオペランドの値が等しいかどうかを調べます。等しい場合、条件式はtrueになります。!=2つのオペランドの値が等しくないかどうかを調べます。等しくない場合、条件式はtrueになります。>左オペランドの値が右オペランドの値より大きいかどうかを調べます。大きい場合、条件式はtrueになります。<左オペランドの値が右オペランドの値より小さいかどうかを調べます。小さ
-
Pythonのビット演算子の種類と使い方をわかりやすく解説
ビット演算子(Bitwise Operators)とは、数値を2進数のビット単位で操作するための演算子です。Pythonでは、以下の6種類のビット演算子が定義されています。 Pythonで使えるビット演算子の一覧 &(ビット単位AND):両方のビットが1の場合のみ1を返します |(ビット単位OR):どちらか一方でも1であれば1を返します ^(ビット単位XOR・排他的論理和):片方のビットだけが1の場合に1を返します ~(ビット反転・補数):ビットが0なら1へ、1なら0へ反転します <<(左シフト):ビットを左へシフトし、右側の空いたビットは0で埋められます >>