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

时间:2009-05-13 19:34:21

标签: c++ winapi

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

MessageBox(NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);

谢谢,

西莫

6 个答案:

答案 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