复杂如果条件

时间:2012-01-19 07:25:46

标签: c++ logical-operators operator-precedence

在遗留代码中,我遇到了以下表达式:

if (!m_bMsOcs && bChannelData || m_bMsOcs && !bStunType)

我想预期的条件是

if ((!m_bMsOcs && bChannelData) || (m_bMsOcs && !bStunType))

我不确定。原始条件表达式应该如何执行?请帮忙。

4 个答案:

答案 0 :(得分:3)

if ( ((!m_bMsOcs) && bChannelData) || (m_bMsOcs && (!bStunType)) ) 

运营商优先级为!> &&> ||

答案 1 :(得分:3)

precedence逻辑运算符是:

! > && > ||

所以你的猜测是正确的。

答案 2 :(得分:1)

逻辑and的优先级高于orlink

所以你对逻辑是正确的。

答案 3 :(得分:0)

正如其他人所说,由于C ++优先规则,这两个表达式是等价的。

这是一个真值表,可能有助于明确将会发生什么(我同意条件表达式比我喜欢的更复杂):

m_bMsOcs    bChannelData    bStunType       Execute?
========    ============    =========       ========
    0             0             0
    0             0             1
    0             1             0               Y
    0             1             1               Y

    1             0             0               Y
    1             0             1
    1             1             0               Y
    1             1             1

请注意,表中的10只代表true / false值(即变量的值不必为{{} 1}} - 任何非零值都将被视为1)。我发现使用1 / 0代替1 / T,表格更具可读性。