布尔值是否隐式为真?
Are booleans implicitly true?
我对这段代码有点困惑。
我的教授解释说输出总是正确的,但我不明白为什么。
我将布尔值更改为 true 和 false,但输出始终为 true,我很难解释其背后的逻辑。我假设既然 false && true 总是代表 true,那么 true 和 false 就像代数一样抵消了?如果我让你们感到困惑,我深表歉意,我自己也很困惑!
public class TestProgram {
public static void main(String args[]) {
boolean answer = false;
boolean output = (answer && true) ^ !answer;
System.out.println("output = " + output);
}
}
这段计算output
的代码表示:
(answer AND true) XOR (NOT answer)
因此,当answer
为true
时:
(answer AND true) XOR (NOT answer)
= (true AND true) XOR (NOT true)
= true XOR false
= true
当 answer
为 false
时:
(answer AND true) XOR (NOT answer)
= (false AND true) XOR (NOT false)
= false XOR true
= true
我不知道哪一部分让您感到困惑,但我会尝试逐行解释您的代码:
boolean answer = false; // answer is false or 0
boolean output = (answer && true) ^ !answer;
一个。 (answer && true) = false or 0
因为答案是 0。并且 returns 为真或仅当所有条件(在本例中为 2)为真时为 1。
b。 !answer = true
因为答案的否定(false 或 )是 true 或 1。
c。 ^
是按位异或运算符:意思是对两个参数进行逐位比较。如果操作数中相应位的一个或另一个(但不是两个)为 1,则位位置的结果为 1。
例如:
00110 ^ 00011 = 00101
所以在你的情况下,你有:false ^ true = 0 ^ 1 = 1
(或真)因为只有一个对应的位是 1。
请注意:
true ^ true
= 假
true ^ false
= 真
false ^ true
= 真
false ^ false
= 假
我对这段代码有点困惑。
我的教授解释说输出总是正确的,但我不明白为什么。
我将布尔值更改为 true 和 false,但输出始终为 true,我很难解释其背后的逻辑。我假设既然 false && true 总是代表 true,那么 true 和 false 就像代数一样抵消了?如果我让你们感到困惑,我深表歉意,我自己也很困惑!
public class TestProgram { public static void main(String args[]) { boolean answer = false; boolean output = (answer && true) ^ !answer; System.out.println("output = " + output); } }
这段计算output
的代码表示:
(answer AND true) XOR (NOT answer)
因此,当answer
为true
时:
(answer AND true) XOR (NOT answer)
= (true AND true) XOR (NOT true)
= true XOR false
= true
当 answer
为 false
时:
(answer AND true) XOR (NOT answer)
= (false AND true) XOR (NOT false)
= false XOR true
= true
我不知道哪一部分让您感到困惑,但我会尝试逐行解释您的代码:
boolean answer = false; // answer is false or 0
boolean output = (answer && true) ^ !answer;
一个。
(answer && true) = false or 0
因为答案是 0。并且 returns 为真或仅当所有条件(在本例中为 2)为真时为 1。b。
!answer = true
因为答案的否定(false 或 )是 true 或 1。c。
^
是按位异或运算符:意思是对两个参数进行逐位比较。如果操作数中相应位的一个或另一个(但不是两个)为 1,则位位置的结果为 1。
例如:
00110 ^ 00011 = 00101
所以在你的情况下,你有:false ^ true = 0 ^ 1 = 1
(或真)因为只有一个对应的位是 1。
请注意:
true ^ true
= 假true ^ false
= 真false ^ true
= 真false ^ false
= 假