In C, does (x==y==z) behave as I'd expect?

前端 未结 3 415
甜味超标
甜味超标 2021-01-11 16:08

Can I compare three variables like the following, instead of doing if((x==y)&&(y==z)&&(z=x))? [The if statement should execute if all three vari

相关标签:
3条回答
  • 2021-01-11 16:16

    You can actually type something like this:

    int main()
    {
            const int first = 27,
                      second = first,
                      third = second,
                      fourth = third;
            if (!((first & second & third) ^ fourth))
                return 1;
            return 0;
    }
    
    0 讨论(0)
  • 2021-01-11 16:17

    No, it does not.

    x == y is converted to int, yields 0 or 1, and the result is compared to z. So x==y==z will yield true if and only if (x is equal to y and z is 1) or (x is not equal to y and z is 0)

    What you want to do is

    if(x == y && x == z)
    
    0 讨论(0)
  • 2021-01-11 16:29

    No. The equality check associates from the left and the logical result is compared as a number, so that the expression 2 == 2 == 1 parses as (2 == 2) == 1, which in turn gives 1 == 1 and results in 1, which is probably not what you want.

    0 讨论(0)
提交回复
热议问题