[英]How to do equal comparison in C or C++?
我只想用C或C ++来表达:
b == c || b == d
我可以这样做:
b == (c || d)
并获得相同的行为?
第一个表达式b == c || b == d
如果b
等于c
或d
则b == 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 ++中的运算符不会隐式分布在这样的子表达式上。 评估严格根据操作员与操作数的直接关联来定义。 你可能没有数学或英语的“捷径”。
如果你编写错误地假设这种隐式分布的代码,你可能最终会得到一个在语法和语义上都有效的表达式,但这并不符合你的期望。
||
操作者产生的值1
或true
如果操作数是真(非零)或的值0
或false
如果两个操作数是假(等于零)。 操作数不必是布尔值; 它们可以是任何标量类型。 (在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 < y
的false
或true
(在C ++中)或0
或1
(在C中)的结果与z
的值进行比较。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.