【问题标题】:java operator and exclusive with boolean operandsjava 运算符和布尔操作数独占
【发布时间】:2013-06-13 11:20:21
【问题描述】:

谁能告诉我为什么它打印出 1? 我肯定知道 true 和 false AND EXCLUSIVE 给出 0。为什么它进入 if 语句?

 public static void main(String[] args) {
    boolean a=true, b=false; 
    int i=0; 
    if(a^b)   {
        i++;
    } 
    System.out.print(i++);
 }

谢谢!

【问题讨论】:

标签: java


【解决方案1】:

您正在使用 xor :^

true ^ false == true

另见:

我实际上不确定您所说的“排他和”是什么意思。另见:

【讨论】:

  • 但我了解到 XOR 仅在我们有 1 和 1 (true, true) 时才给出 true,但在这种情况下我们有 1 和 0 (false)。不是吗?
  • 这只是“与”。如&&&
  • T && T == T, T && F == F, T ^ T == F, T ^ F == T
【解决方案2】:

异或表

0^0 == 0
0^1 == 1
1^0 == 1
1^1 == 0

所以它进入了if语句。

在主块的末尾,System.out.println(i++) 之后,i 变量将具有当前写入的 2

【讨论】:

    【解决方案3】:

    如果你谈论^,它是排他的。对于任何命题 p1 和 p2,只有当 p1 或 p2 之一为真时,p1 ^ p2 才为真。

    因此打印 1 是正常的。

    【讨论】:

      【解决方案4】:

      在 Java 中,^ 运算符是按位异或,而不是异与。由于true XOR false为TRUE,所以进入if子句。

      如果您正在处理boolean,我建议您简单地使用==!= 运算符。

      【讨论】:

      • 在此上下文中,它不是按位异或,而是逻辑异或;)
      【解决方案5】:

      ^ 运算符是exclusive or。这个真值表是

       XOR  | false true 
      -------------------
      false | false true
      true  | true  false
      

      这就是你得到“1”的原因 - 你的 if 语句评估为真。

      干杯,

      【讨论】:

        猜你喜欢
        • 2011-03-14
        • 2011-11-27
        • 2013-03-02
        • 2011-09-27
        • 2011-03-27
        相关资源
        最近更新 更多