| = 在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;
}
我无法理解这个功能是什么。
有人可以解释一下吗?
答案 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].nFlag
与IsDlgButtonChecked(arFlagInfo[i].nCtrlId) == BST_CHECKED
进行了“或”运算,结果将分配给dwChangeNotifyFlags
。否则,dwChangeNotifyFlags
保持不变(因为它与0进行“或”)。