【问题标题】:Are booleans implicitly true?布尔值是否隐含地为真?
【发布时间】:2021-12-04 14:21:12
【问题描述】:

我对这段代码有点困惑。

我的教授解释说输出总是正确的,但我不知道为什么。

我将布尔值更改为 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);
    }
}

【问题讨论】:

标签: java boolean


【解决方案1】:

这段计算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

【讨论】:

    【解决方案2】:

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

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

    2. boolean output = (answer && true) ^ !answer;

      一个。 (answer && true) = false or 0 因为答案为 0。仅当所有条件(在本例中为 2)为真时才返回真或 1。

      b. !answer = true 因为答案(假或)的否定为真或1。

      c。 ^ 是按位异或运算符:表示在两个参数之间进行逐位比较。如果操作数中相应位的一个或另一个(但不是两个)为 1,则位位置的结果为 1。

    例如:

    00110 ^  00011 = 00101
    

    所以在你的情况下,你有:false ^ true = 0 ^ 1 = 1(或 true),因为只有一个对应的位是 1。

    请注意:

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

    【讨论】:

      猜你喜欢
      • 2010-09-27
      • 2019-08-07
      • 2017-08-11
      • 2016-01-06
      • 2022-07-31
      • 1970-01-01
      • 2012-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多