• ベストアンサー

演算子「 | 」について

VC++のネットワークプログラミングの勉強をしています。 HTTPクライアントのソースコードをみていると、 こんなの DWORD dwHttpRequestFlags = INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_NO_AUTO_REDIRECT; とか psf = is.OpenURL( szFile, 1, INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_RELOAD); と書かれているのをよく見るのですが、この場合の「 | 」演算子はどういう意味なのでしょうか? 普通に論理和のことなのでしょうか? その場合はINTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_NO_AUTO_REDIRECTとかはどういう意味を持つ値になるのでしょうか? また、このような書き方をするとどのようなメリットがあるのでしょうか? ご教授よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • don_go
  • ベストアンサー率31% (336/1059)
回答No.2

>普通に論理和のことなのでしょうか? その通りです。 >その場合はINTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_NO_AUTO_REDIRECTとかはどういう意味を持つ値になるのでしょうか? 例えば、 #define INTERNET_FLAG_EXISTING_CONNECT 0x1 #define INTERNET_FLAG_NO_AUTO_REDIRECT 0x2 とした場合 0x1(00000001) と 0x2(00000010) との論理和の結果 0x3(00000011)となります。 ビット毎に意味を持たせることによって、通常なら8個の変数が必要な ところを1バイトですませる事ができます。

minimax2005
質問者

お礼

回答ありがとうございます。 ビットごとにフラグを割り振っていたんですね。 論理和にこんな使い道があるなんて気づきませんでした。 変数を減らせるのは結構便利ですね。

その他の回答 (1)

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.1

論理和です。 INTERNET(略)は定数で、(例えば、)1,2,4,8……と値が割り振られています。 その論理和をとることで、どのフラグが立っているかをひとつの引数で受け取ることが出来ます。

minimax2005
質問者

お礼

回答ありがとうございます。 ビットごとにフラグを割り振っていたんですね。 論理和にこんな使い道があるなんて気づきませんでした。