"num" 如何在此布尔值中发生变化,使其变为 6?
How does "num" become changed in this boolean so that it becomes 6?
int num = 5;
if (num != 5 & num++ != 6 | (num = num--) == 6)
System.out.println("true " + num);
else
System.out.println("false " + num);
这段代码的输出是“真,6”。我需要帮助来理解 num 如何通过布尔语句评估为数字 6。
所以这里实际上发生了几件事。
你的问题的答案是,当 java 在 num++ 上看到 ++ 时,它总是会递增 1。
此外,如果您尝试使用布尔运算,则需要使用 && 和 ||。单个 & 和 |用于按位运算。
正如科林所说,这里实际上发生了很多事情!
我先把if条件的表达式取一半;
num != 5 & num++ != 6
现在它所做的是首先评估 num 不等于 5,即 false
其次,判断num不等于6,即true(后增)
三、按位与运算求值,即false & true
为表达式的这一半生成结果false
第四,增加 num 的值,即从 5 到 6
现在剩下的表达式;
(num = num--) == 6
这部分表达式首先计算括号。
此处 num-- 递减 num 和 returns 当前为 6 的旧值。
然后这个值又被分配给 num 这是一个经典的 postincrement/assignment 混淆(请参阅 了解详细解释)
其次,它评估 num 是否等于 6
,即 true
这就是表达式末尾 num 的值计算为 6
的方式。
这使得表达式的后半部分true
此后 |
按位包含或运算符优先并计算整个表达式,即
false | true
成功 true
.
int num = 5;
if (num != 5 & num++ != 6 | (num = num--) == 6)
System.out.println("true " + num);
else
System.out.println("false " + num);
这段代码的输出是“真,6”。我需要帮助来理解 num 如何通过布尔语句评估为数字 6。
所以这里实际上发生了几件事。
你的问题的答案是,当 java 在 num++ 上看到 ++ 时,它总是会递增 1。
此外,如果您尝试使用布尔运算,则需要使用 && 和 ||。单个 & 和 |用于按位运算。
正如科林所说,这里实际上发生了很多事情!
我先把if条件的表达式取一半;
num != 5 & num++ != 6
现在它所做的是首先评估 num 不等于 5,即 false
其次,判断num不等于6,即true(后增)
三、按位与运算求值,即false & true
为表达式的这一半生成结果false
第四,增加 num 的值,即从 5 到 6
现在剩下的表达式;
(num = num--) == 6
这部分表达式首先计算括号。
此处 num-- 递减 num 和 returns 当前为 6 的旧值。 然后这个值又被分配给 num 这是一个经典的 postincrement/assignment 混淆(请参阅 了解详细解释)
其次,它评估 num 是否等于 6
,即 true
这就是表达式末尾 num 的值计算为 6
的方式。
这使得表达式的后半部分true
此后 |
按位包含或运算符优先并计算整个表达式,即
false | true
成功 true
.