我很想知道在C或C++中,对于这个表达式:
b == c || b == d
我可以做这样的事情吗:
我可以像这样做吗:
b == (c || d)
并获得相同的行为?
第一个表达式b == c || b == d
,如果b
等于c
或d
,则返回true。
第二个表达式b == (c || d)
仅检查b
是否等于0或1,因为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
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
的值进行比较。
(c || d)
是 boolean 类型,在b == (c || d)
比较中,它被提升为int
类型并变成了1
。 - jogojapanb = 1
。 - Jonathan Leffler(c || d)
的类型是int
,值为0
或1
。C语言确实有一个内置的布尔类型叫做_Bool
,在1999年标准中添加,但它并不用于产生逻辑布尔值的任何内置运算符;它们都产生int
类型的值。而在C++中,结果的类型是bool
。(我看到问题现在同时被标记为C和C++。) - Keith Thompsonbool
vsint
部分,但数值最终相同。 - Jonathan Leffler