В C (x == y == z) ведет себя так, как я ожидал? - PullRequest
11 голосов
/ 07 декабря 2010

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

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

Ответы [ 3 ]

33 голосов
/ 07 декабря 2010

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

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)

То, что вы хотите сделать, это

if(x == y && x == z)
6 голосов
/ 07 декабря 2010

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

1 голос
/ 27 апреля 2012

Вы можете набрать что-то вроде этого:

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