-4

論理ビット演算子は何に使用されますか? 最後のビットを読むことで、数字が奇数かどうかをテストできると聞きました。わかりません。実用的な例が必要です。事前に感謝します。

4

3 に答える 3

2

数値が奇数の場合、最後の桁 (2 進数) は 1 です。たとえば、次のようになります。

5 ~  00000101
31 ~ 00011111
but 8 ~ 00001000

そのため、(ビットごとに) 1 と AND を取ると、次のようになります。

1 ~ 00000...01

数値が奇数の場合 (つまり、最後の桁が 1 の場合)、結果として 1 が得られます。

5 ~ 00000101
1 ~ 00000001
-------------
    00000001 => odd

別の使用法は、複数のフラグを 1 つの変数、暗号化などに格納することです。実際には多くのフラグがあります。

于 2013-11-13T08:50:48.880 に答える
0

通常、LSB ビット1が奇数である数値。したがって、最後のLSBビットが設定されているかどうかに関係なく、ビットごとのAND演算子を使用して確認できます。はいの場合は奇数です。

if((num & 1) == 1); // Its an odd number

ただし、論理演算子とビット演算子を混在させることはできません。それらは次の点で異なります。

  1. (ブール値に対して)ブール論理を実行する論理演算子があります。
  2. (整数値に対して) ビットごとのロジックを実行するためのビットごとの演算子があります。
于 2013-11-13T08:51:59.057 に答える
0

二項演算の最も一般的なアプリケーションの 1 つはビットフィールドです。たとえば、各状態に 1 バイトを必要とする char または bool の配列を使用する代わりに、2 つの可能な値を持つ状態を知る必要がある場合は、同じ配列を使用できますが、保持するためにすべてのビットを使用できます。オブジェクトの状態、つまり 8 分の 1 のメモリしか使用しません。また、たとえば、いくつかのエラーにフラグを立てるために二項演算を使用することもできます。この場合、それらを渡すことも、いくつかの演算子を使用して、複数の場所で発生したエラーを見つけること (binary and) や、複数のソースからのエラーをまとめる (binary or) ことも非常に簡単です。また、バイナリ xor を使用すると、ある場所で発生したエラーを見つけることができますが、他の場所では発生しません。注: 「エラー」は他の多くのものに置き換えることができます。

于 2013-11-13T09:06:21.907 に答える