C# でビットマスクを使用する
この投稿では、C# でビットマスクを使用する方法について説明します。 最も重要なことは、この割り当てを行うためのさまざまな方法がたくさんある場合でも、自分がやっていることの背後にある一般的な考え方を理解することです.
ビットマスクを利用するには、メモリ内のビットを操作することに注意する必要があります。
C#
でビットマスクを使用する
C# にはさまざまな演算子があり、そのほとんどはビット演算子と呼ばれます。 これらの演算子は、メモリ内のビット レベルで操作を実行します。
ビット演算子とその記号は次のとおりです。
&
記号で示される演算子は、AND
演算子です。|
で示される演算子 記号はOR
演算子です。~
記号で示される演算子は、NOT
演算子です。^
記号で示される演算子は、XOR
演算子です。<<
記号で示される演算子は左シフト
演算子です。>>
記号で示される演算子は、右シフト AND
演算子です。
AND
演算子の動作は次のとおりです。
X Y Res
0 0 0
0 1 0
1 0 0
1 1 1
Res は出力で、X と Y は入力の可能性です。
OR
演算子の動作は次のとおりです。
X Y Res
0 0 0
0 1 1
1 0 1
1 1 1
Res は出力で、X と Y は入力の可能性です。
NOT
演算子の働きは次のとおりです。
X Y
1 0
0 1
Y
は出力、X
は入力の可能性です。
XOR
演算子の動作は次のとおりです。
X Y Res
0 0 0
0 1 1
1 0 1
1 1 0
Res は出力で、X と Y は入力の可能性です。
left-shift
演算子の動作は次のとおりです。
x = 010110011
2つの左シフトを指定すると、ビットは 2 ビット スペース左に移動します。
x << 2
x
は次のようになります。
x = 011001100
そして右側に、2つの新しい 0
ビットが追加されます。
右シフト演算子の動作は次のとおりです。
x = 010110011
右に 2 回シフトすると、ビットは左に 2 ビット スペース移動します。
x >> 2
x
は次のようになります。
x = 000101100
そして左側に、2つの新しい 0
ビットが追加されます。 これで、ビットごとの演算子の動作がわかったので、入力にビットマスクを適用できます。
ビットマスクに使用される最も一般的な演算子は AND
演算子です。 両方の入力が 1 の場合に出力が 1 になるため、どのビットが 1 でどのビットが 0 であるかを確認するために使用されます。
以下は、マスクされた最後の 4 ビットを評価するコードです。
using System;
namespace HelloWorld {
class Program {
static void Main(string[] args) {
char x = '2';
int y = 0b00001111;
int z = x & y;
Console.WriteLine(z);
}
}
}
メモリに 1 バイトのスペースを確保するために、char
型の変数 x
と int
型の変数 y
を作成しました。
最後の 4 ビットが 1 である対応する 10 進数値のバイナリ バージョンは、0b00001111
として書き込まれます。
int z= x&y;
と書かれた行 ビット単位の and を計算し、結果を z
という名前の変数に保存します。 z
変数は int
データ型であるため、10 進数形式で表された結果を見ることができます。
操作は次のとおりです。
x = 01111101
y = 00001111
z = x& y = 00001101
これは目に見えるので、x
変数は最新の 4 ビットを除いてすべて取り除かれていることがわかります。 そのために、AND
演算子を使用しました。
同様に、OR
演算子を使用してビットを結合することもできます。
ビットについて十分な知識があれば、簡単にビットを操作して暗号を生成できることがわかるはずです。
I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.
LinkedIn