布尔运算符和括号

Boolean operators and parentheses

有人可以向我解释为什么返回 false 吗?所有这些陈述都应该是正确的,除了带有 OR 陈述的那个 - 所以它应该没问题,但是当我 运行 它时它 returns 是错误的。

c1 = 2;
c2 = 2; 
row = 3;
column = 2;

if ((c2 < 3) && (row == c1++) && ((column == c2) || (column == c2++))){
    return true;

row == c1++ 为假,因为 post 增量运算符 returns 增量变量的前一个值。这意味着您正在检查 3 == 2 是否为假。

如果你切换到预增量,你会得到 true:

if ((c2 < 3) && (row == ++c1) && ((column == c2) || (column == c2++))) {
    return true;
}

顺便说一句,你可以简单地写成

return (c2 < 3) && (row == ++c1) && ((column == c2) || (column == c2++));

而不是 if 语句。

此处 row == c1++column == c2++,您使用的是 post 增量。
意思是c1c2只有在语句执行后才自增。

可以使用预自增运算符,使自增在下一条语句之前生效

row == c1++column == c2++ 替换为 row == ++c1column == ++c2

((c2 < 3) && (row == c1++) && ((column == c2) || (column == c2++)))
//   1            2                     3a             3b     

(1) c2 < 3 => 2 < 3 => true

(2) row == c1++ => 3 == 2(使用和更改 - post 增量)=> false

没有进行进一步的评估,因为 (2) 已被确定为 false,结果表达式为 false。这是条件表达式短路的结果。