C#・VBでは言語組み込みのビットごとの演算として、以下のビット演算子が用意されています。 整数型に対して使用することで、ビットごとの演算を行うことができます。 &=
などのように、ビット演算子に=
を後置できる演算子では、代入先を左オペランド(左項)とする複合代入演算子となります。
ビット演算 | 演算子 | |
---|---|---|
C# | VB | |
論理否定(NOT)・1の補数 |
~
|
Not
|
論理積(AND) |
& , &= |
And
|
論理和(OR) |
| , |= |
Or
|
排他的論理和(XOR) |
^ , ^= |
Xor
|
C#におけるビット演算子は、32ビットまたは64ビットの整数型(int
, uint
, long
, uint
)に対してのみ定義されています。 8ビット・16ビット整数型に対してビットごとの演算を行う場合、値は自動的にint
へ拡大変換された上で演算が行われます。 つまり、sbyte
, byte
, char
, short
, ushort
の値に対して演算を行う場合、結果はint
となります。 複合代入演算子を使う場合は、自動的に代入先の型にキャストされます。
上記の演算子をbool
・Boolean
に対して使用すると、ビットごとの演算ではなく単一のブール値に対する演算を行う論理演算子となります。 ただしVBでは、ブール値に対して論理積・論理和を求める場合は通常AndAlso
・OrElse
演算子を使います 詳細は論理演算子 §.AndAlso演算子・OrElse演算子を参照してください。
ビット演算子はFlags属性を持つ列挙体に対しても使用することができます。 (列挙体とフラグ)