在C中,(x == y == z)的行为与我期望的一样吗?
我可以比较三个变量,如下所示,而不是if((x==y)&&(y==z)&&(z=x))
? [如果所有三个变量具有相同的值,则应执行if语句。 这些是布尔。]
if(debounceATnow == debounceATlast == debounceATlastlast) { debounceANew = debounceATnow; } else { debounceANew = debounceAOld; }
不,不是的。
x == y
转换为int,得到0
或1
,并将结果与z
进行比较。 因此,当且仅当(x is equal to y and z is 1) or (x is not equal to y and z is 0)
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; }