gcc 4.7.2
c89
你好,
enum message_e {
SIP_CONNECTED = 1 << 0,
CALL_ACCEPTED = 1 << 1
};
设置代码不同部分的位:
channel->base.message |= CALL_ACCEPTED;
channel->base.message |= SIP_CONNECTED;
稍后我想检查以确保这两个位均已设置:
if((channel->base.message & SIP_CONNECTED) && (channel->base.message & CALL_ACCEPTED)) {
/* IF BOTH BITS ARE SET CALL_ACCEPTED and SIP_CONNECTED */
}
我只想在仅设置了这些位的情况下执行 if 语句。如果设置了 CALL_ACCEPTED 而未设置 SIP_CONNECTED,反之亦然。
但是,如果只设置其中一个,它似乎会陷入 if 语句。
非常感谢您的建议,
最佳答案
您检查过CALL_ACCEPTED和SIP_CONNECTED宏吗?它们是否相互冲突?例如:
CALL_ACCEPTED is 0x01 and SIP_CONNECTED is 0x11.
在您的代码之后:
channel->base.message |= CALL_ACCEPTED;
channel->base.message |= SIP_CONNECTED;
channel->base.message = 0x11;
所以 if((channel->base.message & SIP_CONNECTED) && (channel->base.message & CALL_ACCEPTED))
总是正确的。这就是我的分析
关于比较按位运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15678405/