В 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;
}