2

二重の縦書き「||」を使用しました ブール「または」演算子として。そして、「|」が はビットごとの or です。

ただし、c++/cli を使い始めて以来、複数のフラグを受け入れるように見える単一のパラメーターを使用して、関数内のフラグを分離していたことに気付きました。

この例は、msdn の MessageBox() 関数の例にあります。

int msgboxID = MessageBox(
        NULL,
        (LPCWSTR)L"Resource not available\nDo you want to try again?",
        (LPCWSTR)L"Account Details",
        MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2
    );

「|」によって実行される操作とは正確には何ですか ここ?

「|」とは 実際に呼び出されたシンボル?(「^」は、プログラムする前に知っていた「逆さまのV」ではなく、キャレットと呼ばれます):D

私が尋ねる理由は、関数 setWindowPos() を使用しているためです。これは、フラグもパラメーターとして受け入れます。関数は次のように宣言されています。

BOOL WINAPI SetWindowPos(
  _In_      HWND hWnd,
  _In_opt_  HWND hWndInsertAfter,
  _In_      int X,
  _In_      int Y,
  _In_      int cx,
  _In_      int cy,
  _In_      UINT uFlags
);

そして、MessageBox() と同じようにフラグを組み合わせることができるかどうかを知りたかったのです。

前もって感謝します、

4

5 に答える 5

6

|bitwise orオペレーターです。複数の値を組み合わせてさまざまな効果を生み出すことができる場合、説明した方法で使用されます。例えば:

unsigned char MB_ICONWARNING = 1; //00000001
unsigned char MB_CANCELTRYCONTINUE = (1 << 1); //00000010
unsigned char MB_DEFBUTTON2 = (1 << 2); //00000100

これらの値で表されるすべてのプロパティを持つメッセージ ボックスが必要だとしましょうbitwise or

unsigned char combined = MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2; //00000111

呼び出された関数は、それらを使用して、次のbitwise &ようにオペレーターで要求したオプションを決定できます

if(options & MB_ICONWARNING)
{
    //Do MB_ICONWARNING 
}

if(options & MB_CANCELTRYCONTINUE)
{
    //Do MB_CANCELTRYCONTINUE
}

//etc...

興味がある場合は、 Bit Fieldsの詳細を読むことができます。

于 2013-06-28T14:22:22.490 に答える
2

シンボルは、vertical-bar、vbar、vertical line、または vertical slash のいずれかで呼び出されます。

http://www.theasciicode.com.ar/ascii-printable-characters/vertical-bar-vbar-vertical-line-vertical-slash-ascii-code-124.html

ビットごとの OR を実行します。

http://en.wikipedia.org/wiki/Bitwise_operation

于 2013-06-28T14:18:06.693 に答える
1

ここで、これらすべてのエラーが持つパターン (値の表現を意味します) を見ると、それらをビットごとに論理和する意味がたくさんあることに気付くでしょう。フラグのグループごとに 4 ビット ブロックが予約されており、特定のフラグに従って、そのブロックの値が変更されます。

組み合わせはそのように選択されるため、ビット単位の OR は+演算子として機能します。

MB_ICONWARNING...... 0x00000030L

MB_DEFBUTTON2................. 0x00000100L

MB_CANCELTRYCONTINUE。0x00000006L

ビットごとの OR 結果.................................. 0x00000136L

MessageBoxの略の第3パラメータとして

ダイアログ ボックスの内容と動作。

コンパイラは、ビット単位の結果に従って、何を表示するかを簡単にチェックできるようになりました。

于 2013-06-28T14:18:33.600 に答える