布尔运算符和括号
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 增量。
意思是c1
和c2
只有在语句执行后才自增。
可以使用预自增运算符,使自增在下一条语句之前生效
将 row == c1++
和 column == c2++
替换为
row == ++c1
和 column == ++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
。这是条件表达式短路的结果。
有人可以向我解释为什么返回 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 增量。
意思是c1
和c2
只有在语句执行后才自增。
可以使用预自增运算符,使自增在下一条语句之前生效
将 row == c1++
和 column == c2++
替换为
row == ++c1
和 column == ++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
。这是条件表达式短路的结果。