ビット演算は組み込みプログラミングやドライバープログラミングでよく使われますが、アプリケーション層ではあまり使われないようです。 しかし、使用できる奇妙なテクニックがたくさんあるという印象があります。私が最も感心したのは、leetcode に関する質問です: LeetCode 136. Single Number
実際のシナリオで例を見てみましょう バイト内の特定のビットの値を構成します。 例: この変数の特定のビットを設定するには、ビット単位の OR a = a|0x01 を使用します。これにより、最後のビットが設定されます。特定のビットの値を抽出するには、ビット単位の AND b = a&0x01 を使用できます。最後のビットを抽出した値です。
XOR 演算は、暗号化の中核となる演算の 1 つです。
多くの対称暗号化は XOR 演算に基づいています。
これらはすべて二項演算子であり、アセンブリの概念であり、一般的には使用されません。
リーリーしかし、比較的低レベルのオペレーターであるため、操作速度は非常に速く、通常の操作でも使用できます。
例:
と演算子は通常、クリアに使用されます。
AND 演算子を使用して、整数を短整数に変換できます (実際には dword から word に変換します)。
補数コードにはOR演算が一般的に使用されます。
たとえば、整数型は 4 バイトおよび 32 ビットです。これは、32 ビットに対応するように構成できることを意味します。 (
TRUE
/FALSE
)、このとき、或
を使用して特定の位置を 1 に設定できます。一般的に暗号化には排他的論理和が使用されます
さらに、乗算には左シフト、除算には右シフトなど、他にも奇妙な点があります。
この分野には知識が多すぎるため、一般的には特別に勉強する必要はありません。バイナリについて詳しく知っていれば理解できるでしょう。正直に言うと、かなり難しいです。
長々とタイプしてみましたが、理解できた方は少ないかもしれません。 。
ビット演算は組み込みプログラミングやドライバープログラミングでよく使われますが、アプリケーション層ではあまり使われないようです。
。しかし、使用できる奇妙なテクニックがたくさんあるという印象があります。私が最も感心したのは、leetcode に関する質問です:
LeetCode 136. Single Number
質問は非常に簡単です。要件は、配列内で 1 回出現する唯一の整数を見つけ、他の整数は 2 回出現することです。
一般的なアイデアはテーブルを使用することですが、配列が大きい場合は速度が非常に遅くなり、ビットごとの XOR アルゴリズムが使用されます。
配列内のすべての数値をビット単位で直接 XOR し、残りの数値を求める理由については、オンラインで検索してください。
実際のシナリオで例を見てみましょう
バイト内の特定のビットの値を構成します。
例:
この変数の特定のビットを設定するには、ビット単位の OR a = a|0x01 を使用します。これにより、最後のビットが設定されます。特定のビットの値を抽出するには、ビット単位の AND b = a&0x01 を使用できます。最後のビットを抽出した値です。
ビットマスク、ビットマップなど
バイナリ形式の処理 (例: TCP ヘッダー)
暗号