复杂 if 条件

发布于 2024-12-28 01:51:32 字数 275 浏览 2 评论 0原文

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

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

我猜预期的条件是

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

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

In a legacy code, I have encountered the following expression:

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

I guess the intended condition was

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

I am not sure. How is the original conditional expression supposed to execute? Please help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

天生の放荡 2025-01-04 01:51:32

逻辑运算符的优先级是:

! > && > ||

所以你的猜测是正确的。

The precedence of logical operators is:

! > && > ||

so your guess is correct.

jJeQQOZ5 2025-01-04 01:51:32
if ( ((!m_bMsOcs) && bChannelData) || (m_bMsOcs && (!bStunType)) ) 

运算符优先级为 ! > &&> <代码>||

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

The operator precedence is ! > && > ||

寂寞清仓 2025-01-04 01:51:32

这是一个运算符优先级问题。括号优先,然后是逻辑。作为&&比 || 具有更高的优先级,你的猜测是正确的。

This is an operator precedence question. The parenthesis take precedence, followed by your logicals. As && has greater priority than ||, you're correct in your guess.

〗斷ホ乔殘χμё〖 2025-01-04 01:51:32

逻辑 and 的优先级高于 orlink

所以你的逻辑是正确的。

Logical and have higher precedence than or: link

So you are right about the logic.

陈独秀 2025-01-04 01:51:32

你自己的答案是正确的:)

如果(这个和那个)或(这个和那个)

所以如果其中一个和是正确的,它的评估结果为真

Your own answer is correct:)

If (this and that) or (this and that)

So if either of the ands are correct it evaluates true

不疑不惑不回忆 2025-01-04 01:51:32

正如其他人所说,由于 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)。我只是发现使用 0/1 而不是 T/F 使表格更具可读性。

As others have said, the two expressions are equivalent because of C++ precedence rules.

Here's a truth table that might help make it clear what will happen (I agree that the conditional expression is more complex than I like, too):

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

Note that the 1 and 0 in the table just represent true/false values (i.e., the variables don't have to have a value of 1 - any non-zero value will be treated as a 1). I just find the table to be more readable using 0/1 instead of T/F.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文