繁体   English   中英

如何在C或C ++中进行平等比较?

[英]How to do equal comparison in C or C++?

我只想用C或C ++来表达:

b == c || b == d

我可以这样做:

b == (c || d)

并获得相同的行为?

第一个表达式b == c || b == d 如果b等于cdb == c || b == d将给出true。

第二个表达式b == (c || d)将仅检查b是否等于0或1,因为c || d的输出 c || d是二进制的。

考虑以下代码:

#include <iostream>
using namespace std;

int main() {
    int b=10,c=9,d=10;
    cout << (b ==c || b ==d )<<endl;
    cout<< ( b == ( c || d)) <<endl;
    d=11;
    cout << (b ==c || b ==d )<<endl;
    cout<< ( b == ( c || d)) <<endl;
    return 0;
}

输出是

1
0
0
0

现在您可以清楚地看到两个表达式都不相同。

不,C和C ++中的运算符不会隐式分布在这样的子表达式上。 评估严格根据操作员与操作数的直接关联来定义。 你可能没有数学或英语的“捷径”。

如果你编写错误地假设这种隐式分布的代码,你可能最终会得到一个在语法和语义上都有效的表达式,但这并不符合你的期望。

|| 操作者产生的值1true如果操作数是真(非零)或的值0false如果两个操作数是假(等于零)。 操作数不必是布尔值; 它们可以是任何标量类型。 (在C中,结果是int类型;在C ++中,它的类型为bool 。)表达式

b == c || b == d

相当于

(b == c) || (b == d)

如果b等于c b等于d ,则产生真实结果。 但是这个表达式:

b == (c || d)

计算(c || d)的值,并测试b是否等于该子表达式的结果。

类似的可能混淆来源是

x < y < z

不等于

(x < y) && (y < z)

相反,它相当于

(x < y) < z

其中x < yfalsetrue (在C ++中)或01 (在C中)的结果与z的值进行比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM