|=在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;
}我不明白这个功能是什么。
有人能解释一下吗?
发布于 2014-02-08 07:48:15
这意味着“按位或”,它也在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 1000o现在是:
1110 0001 | 0000 1000 = 1110 1001那就是0xE9
发布于 2014-02-08 07:49:38
这是位或赋值操作符。
int a, int b;
// assign some values to a and b
a |= b;等于
a = (a | b);有关这里中按位运算符的更多信息,请参见C++。
在你的代码中
dwChangeNotifyFlags |= (IsDlgButtonChecked(arFlagInfo[i].nCtrlId) == BST_CHECKED)? arFlagInfo[i].nFlag : 0;意味着如果dwChangeNotifyFlags为真,则arFlagInfo[i].nFlag为IsDlgButtonChecked(arFlagInfo[i].nCtrlId) == BST_CHECKED,并将结果分配给dwChangeNotifyFlags。否则,dwChangeNotifyFlags将保持不变(因为它的OR值为0)。
https://stackoverflow.com/questions/21643445
复制相似问题