重複の可能性:
この&演算子はここでどういう意味ですか?
マクロSDL_BUTTONの直前にあるifステートメントの&がなぜですか?それは何をするためのものか?このコードが何をするのか理解するのを手伝ってください。
if(SDL_GetMouseState(NULL, NULL)&SDL_BUTTON(1))
//code to be executed
重複の可能性:
この&演算子はここでどういう意味ですか?
マクロSDL_BUTTONの直前にあるifステートメントの&がなぜですか?それは何をするためのものか?このコードが何をするのか理解するのを手伝ってください。
if(SDL_GetMouseState(NULL, NULL)&SDL_BUTTON(1))
//code to be executed
これはビット単位の「and」演算であり、の結果を取得SDL_GetMouseState(NULL, NULL)
し、それを。の結果に「anding」しSDL_BUTTON(1)
ます。
つまり、結果は整数値であり、両方の回答で1であるすべてのビットが最終結果で1になります。
事実上、これはSDL_BUTTON(1)が現在押されているかどうかを確認しています。他の同時マウス押下と組み合わせてもボタン1が押された場合、これはtrueと評価されるため、==比較ではなくこれを実行します。
ビットごとのANDの説明
私が以下を持っているとしましょう:int foo = 25;
私はこれをいくつかの異なるベースで見ることができます。通常の基数は10(10進数)です。日常生活の中で日常的に数字を見るベース。10進数では、この数は25
です。基数2(2進数)の数値も確認できます。2進数では、数値はとして表され11001
ます。その数は、いくつかのビットが「真」(1)で、いくつかのビットが「偽」(0)であると解釈できます。「真の」ビットはすべて、列内の位置に関連付けられた固定値を取得します。各列の値は2^iです。ここで、iは列のインデックスです。列には右から左に番号が付けられ、右端の列は番号0になります。
Truth value: 1 1 0 0 1
Column value: 16 8 4 2 1
真であるすべての列の列値を取得し、それらを合計して値を取得します。この場合、1、8、および16は真の列にあるため、これらを合計します。1 + 8 + 16=25。
「ビットワイズ」など、2進数に対して他の操作を実行することもできます。Cには、andステートメントの2つのタイプがあります。論理積とビット単位と。論理的で、次の形式を取ります。
if (a && b) { // two & together is logical-and
// do something
}
ステートメント// do something
は、と解釈できる値を保持し、;と解釈できる値を保持している場合に実行a
さtrue
れ ますb
。true
整数の場合、ゼロ以外の数値はすべてtrue
。です。いずれかがfalseの場合、ステートメントは実行されません。
ビット単位で類似していますが、ビットレベルで動作します。2つの値を取り、一度に1ビットずつ比較して、出力値を決定します。ビットが両方の値で真の場合、出力のビットも真です。いずれかの値のビットがfalseの場合、出力のビットはfalseです。
int a = 25; // 011001
int b = 13; // 001101
int c = a & b; // 001001 -- or 1 + 8 == 9
if (c) {
// do something if c is non-zero
}
上記のコードは、ビット単位の2つの値を取り、それをtrue
またはとして解釈していfalse
ます。SDLで使用されている正確な値はわかりませんが、の値としてSDL_BUTTON(1)
との値がであるとしましょう。 各ビットがフラグを表す整数を返します。戻る(マウスボタン1が下がっている)場合、4 ()になります。戻った場合(マウスボタン2が押されている場合)、0になります( ;共通の列はありません)。12を返す場合(マウスボタン1と2が下がっている場合)、4()になります。4
SDL_BUTTON(2)
8
SDL_GetMouseState(NULL, NULL)
SDL_GetMouseState(NULL, NULL)
4
4 & 4
0100 & 0100 == 0100
8
8 & 4
01000 & 00100 == 00000
1
12 & 4
01100 & 00100 == 00100
マウスボタン1を押すと、結果は&
ゼロ以外になりますtrue
。マウスボタン1を押してマウスボタン2を押しても、結果はそのまま true
です。