什么是| 运算符在函数调用中的意思?[C++]

Sea*_*nor 2 c++ winapi

我在查看Win32 gui代码时经常会看到这个.我的假设是它是一个标准的按位或者,但我也偶尔在C#中看到它,似乎会有一个更好的(更高级别)方式来做同样的事情.无论如何,这是一个例子:

MessageBox(NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
Run Code Online (Sandbox Code Playgroud)

谢谢,

西莫

Dav*_*ley 17

| 是一个按位OR.MB_OK和MB_ICONEXCLAMATION是定义的常量,它是2的幂(例如32或128),因此按位OR可以组合它们(128 | 32将是160,其中设置了两个位).当这些位用作标志时,这是正常的.

  • 另请注意,它并非特定于函数调用,它在各处都表现相同. (5认同)

Ser*_*pth 12

它用于bitmasking.让我们使用这个令人难以置信的简单例子.您有颜色的二进制值,具有以下值.

100 =蓝色

010 =红色

001 =绿色

当你说SomeFunction(BLUE | RED | GREEN); 你实际上传递了值111,然后可以将其解码为蓝色和红色和绿色.

Google Bitwise运营商了解更多详情.


Meh*_*ari 5

它是像其他地方一样的按位或运算符.基本上,当您想要设置一些非互斥的属性时,会使用此技术.

该函数可以使用以下代码轻松检查它们:

if (arg & MB_ICONEXCLAMATION) { // Show an exclamation icon...

}

// ...

if (arg & MB_OK) { // Show an OK button

}
Run Code Online (Sandbox Code Playgroud)