C语言中,如果要判断两个数是否同时为1,能不能用连等表达式?

要判断a和b是否同时为1,能不能写成if (a == b == 1) ?

还是只能写成if (a == b && a == 1)

==运算符的求值顺序是“从左到右”,那么对于a == b == 1来说,先计算a(假如是表达式的话),再计算b,如果满足a == b就决定了该逻辑表达式的值,不再进行 == 1的比较运算,这是由于“短路”效应造成的,等效于a == b || b == 1,显然与你的目的不符,所以说,要判断a和b是否同时为1,不能写成if (a == b == 1),而只能写作if((a == b) && (b == 1)),或if((a == 1) && (b == 1)),或if((1 == a) && (1 == b))等。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-18
上面的不行,逻辑判断连续来语法上是没有问题的,但是得不到想要的结果,呵呵
道理应该很简单,如a == b == 1这个,运算顺序是先运算a == b返回值是0或者1,再让这个0或者1和这个后面的表达式运算,也就是0或者1和后面的1运算,
0==1或者1==1来做

所以说语法上没有问题,但是结果不一定是你想要的
如果ab都为2,那么a==b返回1,和1运算,那么返回1,但是ab是2,但不是1,可是返回1,是正确的
明白没??????????本回答被提问者采纳
第2个回答  2013-06-18
以我的经验,实际中不能用连等。
假设语法合法,如果从左到右计算的话a==b结果为1,刚巧 1==1,最终结果为1,可以通过。
第3个回答  2013-06-18
用a == b && a == 1
写个程序验证一下
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
int a = 3;
int b = 3;
if(a==b==1)
printf("a,b都是1\n");
else
printf("a,b不都是1\n");
system("pause");
return 0;
}
输出结果为 :
a,b都是1

因为 a==b==1 即 (a==b)==1
在a=3,b=3 时 a==b的值为1
1==1
也为1

可见a == b == 1 只用表示 ab相等,不能表示ab都为1
第4个回答  2013-06-18
if(a==1 && b==1)
相似回答