【问题标题】:Difference between 2^0*2 and (2^0)*2?2^0*2 和 (2^0)*2 的区别?
【发布时间】:2016-10-01 08:11:22
【问题描述】:

我预计两个表达式都会给出相同的答案:

System.out.println(2^0*2);
System.out.println((2^0)*2);

输出:

2
4

2^0*2 = 2(2^0)*2 = 4 有什么具体原因吗?

【问题讨论】:

  • 请只使用一种语言。询问两种语言的问题过于宽泛。
  • * 的优先级高于 ^。很可能您的意图是Math.pow(2, 0) * 2

标签: java operators expression


【解决方案1】:

您错误地认为^ 运算符的行为与数学中的幂运算相同。

乍一看你可以看到^被理解为+操作符。实际上它的意思是按位XOR 运算符。

System.out.println(2^0*2);   //  2 XOR 0  * 2 = 2
System.out.println((2^0)*2); // (2 XOR 0) * 2 = 4
System.out.println(2^4);     //  2 XOR 4      = 6

XOR 是异或运算,仅当输入不同时才输出真。这是整个技巧:

2^0 = 2 XOR 0 = (0010) XOR (0000) = (0010) = 2 
2^4 = 2 XOR 4 = (0010) XOR (0100) = (0110) = 6

【讨论】:

    【解决方案2】:

    查看此链接

    http://bmanolov.free.fr/javaoperators.php

    2^0*2=2

    • 具有比 ^ 更高的优先级,因此首先您将评估 0*2,即 0,然后将其与 2 进行异或运算,结果为 2

    (2^0)*2

    () 具有更高的优先级,因此您将首先评估 2^0 然后是 2 然后将其乘以 2

    【讨论】:

    • 在我确切提到的是幂运算符的地方,我提到了它的异或
    • NO 检查链接它指定'^'的不同含义
    【解决方案3】:

    Operator Precedence

    在您的第一个示例中,您计算​​:0*2 = 2 ^ 0 = 2

    在第二个示例中,您计算​​:2 ^ 0 = 2 * 2 = 4

    【讨论】:

      猜你喜欢
      • 2018-05-29
      • 2016-05-13
      • 2021-12-03
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2019-06-08
      • 2017-06-14
      • 1970-01-01
      相关资源
      最近更新 更多