布尔值是否隐式为真?

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)

因此,当answertrue时:

(answer AND true) XOR (NOT answer)
 = (true AND true) XOR (NOT true)
 = true XOR false
 = true

answerfalse 时:

(answer AND true) XOR (NOT answer)
 = (false AND true) XOR (NOT false)
 = false XOR true
 = true

我不知道哪一部分让您感到困惑,但我会尝试逐行解释您的代码:

  1. boolean answer = false; // answer is false or 0

  2. 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。

请注意:

  1. true ^ true = 假
  2. true ^ false = 真
  3. false ^ true = 真
  4. false ^ false = 假