関数に引数を渡すときに「|」で区切っている意味がわかりません。
入門書関係を調べてみたのですが、ビット演算子の事しか載っていませんでした。
教えてください。よろしくお願いします。
例)CreateWindow(CHD_CLASS,
NULL,
WS_CHILDWINDOW | WS_VISIBLE, ←これです。
20,
20,
60,
30,
:
:
:
ビット演算子であっています。複数のフラグを指定したりするときによく使います。
l(or)や&(and)はよく使うので、きちんと動作を理解しておいた方がいいと思います。
おっしゃっている通り、論理和の「ビット演算子」です。
すみません。動作を理解できていないみたいです。
ビット演算子という事は、WS_CHILDWINDOWとWS_VISIBLEの
ビット毎の論理和をとって、それを引数として渡しているという事で
良いのでしょうか?
入門書には、WS_CHILDWINDOWであり、なおかつWS_VISIBLEであるウインドウ
が生成されるような事が書かれていましたが、論理和をとると、
WS_CHILDWINDOWとWS_VISIBLEの特徴を持った事を示す値になるということ
でしょうか?
また、OR演算子でなく、WS_CHILDWINDOW & WS_VISIBLEとした場合は、
どのような動作になるのでしょうか?
よろしくお願いします。
基本的には、ぷららさんのおっしゃる通りで合っています。
あとは、皆さんがおっしゃっているように、ビット演算の勉強をすればいいだけです。
Windows98/VC++6.0sp5pro/SDK-may2002/ATL3.0/WTL7.0
私の環境での、WinUser.h より抜粋。
#define WS_VISIBLE 0x10000000L
#define WS_CHILD 0x40000000L
#define WS_CHILDWINDOW (WS_CHILD)
| はビットごとの論理和、& はビットごとの論理積なので、以下の式が成立します。
(WS_CHILDWINDOW | WS_VISIBLE) == 0x50000000L
(WS_CHILDWINDOW & WS_VISIBLE) == 0x00000000L
(0x50000000L & WS_VISIBLE) == 0x10000000L == WS_VISIBLE
(0x50000000L & WS_CHILDWINDOW) == 0x40000000L == WS_CHILDWINDOW
(0x50000000L & 0x01) == 0L
わかりました。ビット演算の勉強をしようと思います。
レスをくれた方々、本当にありがとうございました。