在C中,(x == y == z)的行为与我期望的一样吗?

时间:2010-12-07 15:08:07

标签: c equality

我可以比较以下三个变量,而不是if((x==y)&&(y==z)&&(z=x))吗? [如果所有三个变量具有相同的值,则应执行if语句。这些是布尔。]

if(debounceATnow == debounceATlast == debounceATlastlast)
{
 debounceANew = debounceATnow;
}
else
{
 debounceANew = debounceAOld;
}

3 个答案:

答案 0 :(得分:33)

不,它没有。

x == y转换为int,产生01,并将结果与​​z进行比较。因此x==y==z当且仅当(x is equal to y and z is 1) or (x is not equal to y and z is 0)

时才会生成真实

你想做的是

if(x == y && x == z)

答案 1 :(得分:6)

没有。左侧的相等性检查关联,逻辑结果与数字进行比较,因此表达式2 == 2 == 1解析为(2 == 2) == 1,后者又提供1 == 1并生成1 },这可能不是你想要的。

答案 2 :(得分:1)

您实际上可以键入以下内容:

int main()
{
        const int first = 27,
                  second = first,
                  third = second,
                  fourth = third;
        if (!((first & second & third) ^ fourth))
            return 1;
        return 0;
}