我原本预计两个表达式会给出相同的答案:
System.out.println(2^0*2);
System.out.println((2^0)*2);
输出:
2
4
2^0*2 = 2
和(2^0)*2 = 4
答案 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
(2 ^ 0)* 2
()具有更高的优先级,因此您将首先评估2 ^ 0然后是2然后将其乘以2
答案 2 :(得分:-3)