我在查看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,其中设置了两个位).当这些位用作标志时,这是正常的.
Ser*_*pth 12
它用于bitmasking.让我们使用这个令人难以置信的简单例子.您有颜色的二进制值,具有以下值.
100 =蓝色
010 =红色
001 =绿色
当你说SomeFunction(BLUE | RED | GREEN); 你实际上传递了值111,然后可以将其解码为蓝色和红色和绿色.
Google Bitwise运营商了解更多详情.
它是像其他地方一样的按位或运算符.基本上,当您想要设置一些非互斥的属性时,会使用此技术.
该函数可以使用以下代码轻松检查它们:
if (arg & MB_ICONEXCLAMATION) { // Show an exclamation icon...
}
// ...
if (arg & MB_OK) { // Show an OK button
}
Run Code Online (Sandbox Code Playgroud)