screen = SDL_SetVideoMode(1000,1000,32, SDL_HWSURFACE | SDL_FULLSCREEN);
何をします|
かSDL_HWSURFACE | SDL_FULLSCREEN
?(私はこれをグーグルで検索しようとしましたが、グーグルは特殊文字を受け入れません。)
screen = SDL_SetVideoMode(1000,1000,32, SDL_HWSURFACE | SDL_FULLSCREEN);
何をします|
かSDL_HWSURFACE | SDL_FULLSCREEN
?(私はこれをグーグルで検索しようとしましたが、グーグルは特殊文字を受け入れません。)
C / C ++ APIは、特定の関数呼び出しに設定できる、相互に排他的ではないさまざまなオプションが多数ある場合に、ビット「フラグ」を設定することがよくあります。各フラグには、値のビット位置が割り当てられます(多くの場合、DWORD
または他の大きな整数型)。次に、これらのビットの1つ以上を、オプションを表す定義済み定数のコレクションをビット単位でOR演算し、生の数値定数よりも明確なラベルを付けて設定できます。結果の値は、単一の引数としてAPI関数に渡されます。これは、署名を管理しやすくするのに役立ちます。
この特定のケースでは、SDL_HWSURFACE
およびは、呼び出しSDL_FULLSCREEN
に渡すことができるオプションを表します。SDL_SetVideoMode
この場合に設定されなかった他のいくつかの可能なオプションもおそらく利用可能です。この特定の呼び出しは、フラグ定数をビット単位でOR演算し、結果を最後のパラメーターとして渡すことによって、2つのオプションを設定します。
それがbitwise OR
演算子です。とに適用しSDL_HWSURFACE
ますSDL_FULLSCREEN
。
|
演算子はビット単位またはを意味します。つまり、左側または右側の値の対応するビットが設定されている場合、結果の各ビットが設定されます。つまり1 | 2 = 3
、2進数の1は01で、2進数の2は10であるため、2進数の結果は11になり、10進数で3になります。
あなたの例では、これは多くの異なるオン/オフオプションを関数に渡すために使用されます。各定数には、正確に1つのビットが設定されています。次に、関数は渡された値を調べ、ビットごとの演算子と演算子を使用して、指定した値&
を確認します。
他の回答はそれがビット単位のORであると説明していますが、おそらくそれがどのように機能するかを知りたいでしょう:
フラグは00001000や01000000などの2進数として渡され、各ビットは個々のフラグを表します。したがって、最初のビット(0)はHW_SURFACEがオフであることを意味し、2番目のビット(1)はFULLSCREENがオンであることを意味します。(これらは例であることに注意してください。実際のビットについてはわかりません。)
したがって、ビットごとのOR関数は、各ビットを比較して「このビットまたはこのビット1ですか?」と言うことにより、これら2つのフラグを組み合わせます。いずれかが1の場合、結果は1に設定されます。これにより、結果01001000が提供され、SDLで解析して適切なフラグを設定できます。