В C, работает ли (x == y == z), как и следовало ожидать?

Можно ли сравнить три переменные, например, следующие, вместо выполнения if((x==y)&&(y==z)&&(z=x))? [Оператор if должен выполняться, если все три переменные имеют одинаковое значение. Это логические значения.]

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

Ответ 1

Нет, это не так.

x == y преобразуется в int, дает 0 или 1, и результат сравнивается с 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)

Ответ 2

Нет. Проверка равенства сопоставляется слева, а логический результат сравнивается как число, так что выражение 2 == 2 == 1 анализирует как (2 == 2) == 1, которое, в свою очередь, дает 1 == 1 и приводит к 1, что, вероятно, не является тем, что вы хотите.

Ответ 3

На самом деле вы можете ввести что-то вроде этого:

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