什么是| =意思

时间:2014-02-08 07:45:30

标签: c++

| = 在C ++中意味着什么?我在网上找到了这段代码:

DWORD CDirWatcherDlg::GetChangeFlags1()
{

    DWORD dwChangeNotifyFlags = 0UL;
    FLAG_INFO arFlagInfo[]={
        {IDC_CHECK_FILE_NAME1,      FILE_NOTIFY_CHANGE_FILE_NAME},
        {IDC_CHECK_DIR_NAME1,       FILE_NOTIFY_CHANGE_DIR_NAME},
        {IDC_CHECK_LAST_WRITE1,     FILE_NOTIFY_CHANGE_LAST_WRITE},
        {IDC_CHECK_LAST_ACCESS1,    FILE_NOTIFY_CHANGE_LAST_ACCESS},
        {IDC_CHECK_SIZE1,           FILE_NOTIFY_CHANGE_SIZE},
        {IDC_CHECK_ATTRIBUTES1,     FILE_NOTIFY_CHANGE_ATTRIBUTES},
        {IDC_CHECK_LAST_WRITE1,     FILE_NOTIFY_CHANGE_LAST_WRITE},
        {IDC_CHECK_LAST_ACCESS1,    FILE_NOTIFY_CHANGE_LAST_ACCESS},
        {IDC_CHECK_CREATION1,       FILE_NOTIFY_CHANGE_CREATION},
        {IDC_CHECK_SECURITY1,       FILE_NOTIFY_CHANGE_SECURITY}
    };

    for(int i = 0; i < sizeof(arFlagInfo)/sizeof(arFlagInfo[0]); ++i)
    {
        dwChangeNotifyFlags |= (IsDlgButtonChecked(arFlagInfo[i].nCtrlId) == BST_CHECKED)? arFlagInfo[i].nFlag : 0;
    }

    return dwChangeNotifyFlags;
}

我无法理解这个功能是什么。

有人可以解释一下吗?

2 个答案:

答案 0 :(得分:3)

这意味着"bitwise OR",它也在C中使用,其作用与+=

相同

例如,假设我们有以下代码:

char o = 0xF0;
o |= 0x0F;     //You can also write o = o|0x0F;

现在,o的值为0xFF

 1111 0000 | 0000 1111   =   1111 1111

让我们再试一次:

char o = 0xE1;  //1110 0001
o |= 0x08;      //0000 1000

o现在是:

1110 0001 | 0000 1000   =   1110 1001

哪个是0xE9

答案 1 :(得分:0)

这是按位OR赋值运算符。

int a, int b;
// assign some values to a and b
a |= b;

相当于

a = (a | b);

有关C ++中按位运算符的更多信息,请参阅here

在您的代码中

dwChangeNotifyFlags |= (IsDlgButtonChecked(arFlagInfo[i].nCtrlId) == BST_CHECKED)? arFlagInfo[i].nFlag : 0;

表示如果dwChangeNotifyFlags为真,arFlagInfo[i].nFlagIsDlgButtonChecked(arFlagInfo[i].nCtrlId) == BST_CHECKED进行了“或”运算,结果将分配给dwChangeNotifyFlags。否则,dwChangeNotifyFlags保持不变(因为它与0进行“或”)。