为什么结果是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的评估步骤。

10-11 16:50