C 中的 a==b==c 是什么?[复制]

What is a==b==c in C? [duplicate]

提问人:Milky酱TH 提问时间:5/10/2021 最后编辑:Vlad from MoscowMilky酱TH 更新时间:5/10/2021 访问量:2277

问:

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 是匹配变量的地址。 我需要更多的线索和证据。

C 比较 运算符

评论

3赞 pmg 5/10/2021
a == b == cis 是 or (如果 和 具有相同的值......是 )。相等运算符生成值为 或 的 。(a == b) == c0 == c1 == cab1 == c==int01
2赞 Some programmer dude 5/10/2021
这是关于操作员的关联性。对于操作员来说,它是从左到右的,这导致了@pmg提到的情况。==
1赞 Lundin 5/10/2021
只是不要编写诸如 .奇怪的代码会产生奇怪的结果。a == b == c
0赞 0___________ 5/10/2021
非常频繁的欺骗。您应该使用上面的 SO 搜索框。

答:

0赞 Sourav Ghosh 5/10/2021 #1

比较运算符具有从左到右的关联性。==

所以,像这样的表达

 a == b == c

(a == b ) == c

在你的例子中,, , ,都具有值,表达式原来是abc0

(0 == 0) == 0

  1 == 0

它产生 0 (Falsy)。因此,控制权交给了零件。else

然后,由于上述原因,计算结果为 (truey),因此执行相应的块。a == b1if

2赞 NemoYuan2008 5/10/2021 #2

在 C 中,等价于 ,其中如果为 true,则为 1,否则为 0。a == b == c(a == b) == ca == b

在你的例子中,是真的,所以等价于 ,这是假的。a == ba == b == c1 == c

您可以进一步尝试:

printf("%d\n%d\n", 0 == 0, 0 == 1);

结果如下:

1
0
0赞 Vlad from Moscow 5/10/2021 #3

相等运算符从左到右计算,如果 指定的相等式为 true,如果为 false。10

因此,if 语句中的表达式

if (a==b==c)

相当于

if ( ( a == b ) == c )

As 等于 (两者都等于 ),则第一个子表达式的计算结果为 1,您实际上有ab0( 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。abbc

另一方面,as 等于 then this if 语句也被执行。ab

if (a==b)
{
     printf("333");
}