Могу ли я сравнить три переменные, как показано ниже, вместо того, чтобы делать if((x==y)&&(y==z)&&(z=x))? Оператор if должен выполняться, если все три переменные имеют одинаковое значение. Это логические значения.]
if((x==y)&&(y==z)&&(z=x))
if(debounceATnow == debounceATlast == debounceATlastlast) { debounceANew = debounceATnow; } else { debounceANew = debounceAOld; }
Нет, это не так.
x == y преобразуется в int, дает 0 или 1, и результат сравнивается сz.Таким образом, x==y==z выдаст true, если и только если (x is equal to y and z is 1) or (x is not equal to y and z is 0)
x == y
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, что, вероятно, не соответствует хочу.
2 == 2 == 1
(2 == 2) == 1
1 == 1
Вы можете набрать что-то вроде этого:
int main() { const int first = 27, second = first, third = second, fourth = third; if (!((first & second & third) ^ fourth)) return 1; return 0; }