为什么结果是x=1 y=3 res=1
int x = 7, y = 3;
int res;
res = (x = y < 2 || x != 1);
printf("x = %d y = %d res = %d\n", x, y, res);
这个代码的结果是y
res= (x = y < 2); //|| x != 1);
printf("x = %d y = %d res= %d\n", x, y, res);
最佳答案
res = (x = y < 2 || x != 1);
…评估为。。。
res = (x = ((y < 2) || (x != 1)));
你可以发现C++中的操作符预定义here -C与你所使用的操作符是相似的。
所以对于
x = 7, y = 3
。。。res = (x = ((3 < 2) || (7 != 1)));
res = (x = (false || true)); // || is "logical-OR", tests if either true
res = (x = true);
res = (x = 1); // standard conversion from bool to int
res = 1;
对于第二个更简单的陈述:
res = (x = y < 2);
res = (x = (y < 2));
res = (x = (3 < 2));
res = (x = false);
res = (x = 0); // standard conversion from bool false to int 0
res = 0;
在C中,即使 > cc>、
#include <stdbool.h>
和<
运算符将立即对“true”测试产生!=
,而||
为“false”,并且在C++中没有单独的“标准转换”。Allan的答案很好地描述了C的评估步骤。关于c++ - 这两种情况下c的工作原理以及差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28473348/