C#ビット単位およびビットシフト演算子
ビット演算子はビットを処理し、ビットごとの演算を実行します。
C#でサポートされているビット演算子を次の表に示します。変数Aが60を保持し、変数Bが13を保持すると仮定します-
演算子 | 説明 | 例 |
---|---|---|
& | ビットごとのAND演算子は、両方のオペランドにビットが存在する場合、結果にビットをコピーします。 | (A&B)=12、つまり0000 1100 |
| | ビットごとのOR演算子は、いずれかのオペランドに存在する場合、ビットをコピーします。 | (A | B)=61、つまり0011 1101 |
^ | ビットごとのXOR演算子は、ビットが両方ではなく一方のオペランドに設定されている場合、そのビットをコピーします。 | (A ^ B)=49、つまり0011 0001 |
〜 | ビット単位の補数演算子は単項であり、ビットを「反転」させる効果があります。 | (〜A)=61、これは2の補数で1100 0011です。これは、符号付きの2進数によるものです。 |
<< | ビット単位の左シフト演算子 左のオペランドの値は、右のオペランドで指定されたビット数だけ左に移動します。 | A <<2 =240、つまり1111 0000 |
>> | ビット単位の右シフト演算子 左のオペランドの値は、右のオペランドで指定されたビット数だけ右に移動します。 | A>> 2 =15、つまり0000 1111 |
以下は、C#でビット演算子を実装する方法を示す例です。
using System; namespace MyApplication { class Program { static void Main(string[] args) { int a = 60; /* 60 = 0011 1100 */ int b = 13; /* 13 = 0000 1101 */ int c = 0; // Bitwise AND Operator c = a & b; /* 12 = 0000 1100 */ Console.WriteLine("Line 1 - Value of c is {0}", c ); // Bitwise OR Operator c = a | b; /* 61 = 0011 1101 */ Console.WriteLine("Line 2 - Value of c is {0}", c); // Bitwise XOR Operator c = a ^ b; /* 49 = 0011 0001 */ Console.WriteLine("Line 3 - Value of c is {0}", c); // Bitwise Complement Operator c = ~a; /*-61 = 1100 0011 */ Console.WriteLine("Line 4 - Value of c is {0}", c); // Bitwise Left Shift Operator c = a << 2; /* 240 = 1111 0000 */ Console.WriteLine("Line 5 - Value of c is {0}", c); // Bitwise Right Shift Operator c = a >> 2; /* 15 = 0000 1111 */ Console.WriteLine("Line 6 - Value of c is {0}", c); Console.ReadLine(); } } }
Line 1 - Value of c is 12 Line 2 - Value of c is 61 Line 3 - Value of c is 49 Line 4 - Value of c is -61 Line 5 - Value of c is 240 Line 6 - Value of c is 15>
-
Rubyでのビット単位のハック
通常、日常業務でビット単位の計算を行う必要はない可能性があります。 Rubyのビット単位のANDおよびOR演算子(&および|)は、意図的ではなく偶然に使用される可能性があります。誤って入力していないのは誰ですか? しかし、Cやアセンブラー、または私の場合はTurbo Pascalのような低レベルの言語をプログラミングして育った場合は、おそらく少なくとも少し手を加えたことがあるでしょう。 問題に対するビット単位の解決策はクールです。コンピューターが実行できる最も基本的な操作(2進数学)を使用して問題を解決できる場合、それ以上にエレガントになることはありません。 Rubyでのバイナリの操作
-
Rubys Bitwise Toolbox:演算子、アプリケーション、および魔法のトリック
Railsアプリの構築に一生を費やすことができ、ビット演算子を使用する必要はありません。プログラミングに不慣れな場合は、「ビット単位」が何を意味するのかさえわからないかもしれません。 しかし、効率が重要でリソースが限られているシステムに関心を持った瞬間、ビット単位の操作が重要になります。これらは、ネットワークプロトコル、暗号化、Unixファイルのアクセス許可、組み込みシステムなどで広く使用されています。 さらに、コンピューターが2つの数値を加算するなどの動作を実際に理解するには、ビット演算を理解する必要があります。 Rubyや他の多くの言語はネイティブサポートを備えているため、将来