我在查看Win32 gui代码时经常会看到这个。我的假设是它是一个标准的按位或者,但我也偶尔在C#中看到它,似乎会有一个更好的(更高级别)方式来做同样的事情。无论如何,这是一个例子:
MessageBox(NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
谢谢,
西莫
答案 0 :(得分:17)
|是一个按位OR。 MB_OK和MB_ICONEXCLAMATION是定义的常量,它是2的幂(例如32或128),因此按位OR可以组合它们(128 | 32将是160,其中设置了两个位)。当这些位用作标志时,这是正常的。
答案 1 :(得分:12)
用于比特掩码。让我们使用这个令人难以置信的简单例子。您有颜色的二进制值,具有以下值。
100 =蓝色
010 = RED
001 =绿色
当你说SomeFunction(蓝色|红色|绿色);你实际上传递了值111,然后可以将其解码为蓝色和红色和绿色。
Google Bitwise运营商了解更多详情。
答案 2 :(得分:5)
这是其他地方的按位或操作符。基本上,当您想要设置一些非互斥的属性时,会使用此技术。
该函数可以使用以下代码轻松检查它们:
if (arg & MB_ICONEXCLAMATION) { // Show an exclamation icon...
}
// ...
if (arg & MB_OK) { // Show an OK button
}
答案 3 :(得分:2)
将MB_ICONEXCLAMATION和MB_OK视为“选项”,它们并不比整数更漂亮。你关心的是那些整数的位代表。
说:
//MessageBox.cs or whatever
public static int MB_ICONEXCLAMATION = 0x1 // 0001 in binary
public static int MB_OK = 0x2 // 0010 in binary
当你将它们组合在一起时,你会得到二进制的0011。因此,您只使用一个参数为MessageBox请求两个选项,而不是必须有更多参数,每个参数对应您要指定的每个选项。
答案 4 :(得分:1)
这是一个按位OR。
答案 5 :(得分:0)
它按位或。
int x = 5 | 3; // x == 7 now