提问人:Milky酱TH 提问时间:5/10/2021 最后编辑:Vlad from MoscowMilky酱TH 更新时间:5/10/2021 访问量:2277
C 中的 a==b==c 是什么?[复制]
What is a==b==c in C? [duplicate]
问:
int main()
{
int a=0,b=0,c=0;
if (a==b==c)
{
printf("111\n");
}
else
{
printf("222\n");
}
if (a==b)
{
printf("333");
}
}
输出为
222
333
很明显,a==b==c 是假的,a==b 是真。 但我找不到原因。 我想也许 a==b==c 是匹配变量的地址。 我需要更多的线索和证据。
答:
0赞
Sourav Ghosh
5/10/2021
#1
比较运算符具有从左到右的关联性。==
所以,像这样的表达
a == b == c
与
(a == b ) == c
在你的例子中,, , ,都具有值,表达式原来是a
b
c
0
(0 == 0) == 0
或
1 == 0
它产生 0 (Falsy)。因此,控制权交给了零件。else
然后,由于上述原因,计算结果为 (truey),因此执行相应的块。a == b
1
if
2赞
NemoYuan2008
5/10/2021
#2
在 C 中,等价于 ,其中如果为 true,则为 1,否则为 0。a == b == c
(a == b) == c
a == b
在你的例子中,是真的,所以等价于 ,这是假的。a == b
a == b == c
1 == c
您可以进一步尝试:
printf("%d\n%d\n", 0 == 0, 0 == 1);
结果如下:
1
0
0赞
Vlad from Moscow
5/10/2021
#3
相等运算符从左到右计算,如果
指定的相等式为 true,如果为 false。1
0
因此,if 语句中的表达式
if (a==b==c)
相当于
if ( ( a == b ) == c )
As 等于 (两者都等于 ),则第一个子表达式的计算结果为 1,您实际上有a
b
0
( a == b )
if ( 1 == c )
由于 c 等于 0,则表达式的计算结果为 0,并且绕过 if 语句的复合语句。因此,将执行 else 语句的子语句1 == c
printf("222\n");
也许代码的作者的意思是以下 if 语句
if ( ( a == b ) && ( b == c ) )
在这种情况下,as is equal to 和 is equal to,则此条件的计算结果为逻辑 true。a
b
b
c
另一方面,as 等于 then this if 语句也被执行。a
b
if (a==b)
{
printf("333");
}
评论
a == b == c
is 是 or (如果 和 具有相同的值......是 )。相等运算符生成值为 或 的 。(a == b) == c
0 == c
1 == c
a
b
1 == c
==
int
0
1
==
a == b == c