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

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

if(debounceATnow == debounceATlast == debounceATlastlast)
{
 debounceANew = debounceATnow;
}
else
{
 debounceANew = debounceAOld;
}
3 ответа

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

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 == 1 анализирует как (2 == 2) == 1, которое, в свою очередь, дает 1 == 1 и приводит к 1, что, вероятно, не является тем, что вы хотите.


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

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

licensed under cc by-sa 3.0 with attribution.