2 ^ 0 * 2和(2 ^ 0)* 2之间的差异?

时间:2016-10-01 08:11:23

标签: java operators expression

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

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

输出:

2
4

2^0*2 = 2(2^0)*2 = 4

有特定原因吗?

3 个答案:

答案 0 :(得分:9)

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

乍一看,您可以看到^被理解为+运营商。实际上它意味着按位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是独占分离,仅在输入不同时才输出true。这是完整的伎俩:

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

答案 1 :(得分:1)

检查此链接

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

2 ^ 0 * 2 = 2

  • 具有更高的优先级n ^所以首先你将评估0 * 2为0,然后xor为2,这将是resutl 2

(2 ^ 0)* 2

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

答案 2 :(得分:-3)

Operator Precedence

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

在你的第二个例子中,你计算:2 ^ 0 = 2 * 2 = 4