我原本以为这两个表达式会得出相同的答案:
System.out.println(2^0*2);
System.out.println((2^0)*2);
输出:
2
4
有没有特殊的原因导致
2^0*2 = 2
和 (2^0)*2 = 4
呢?我原本以为这两个表达式会得出相同的答案:
System.out.println(2^0*2);
System.out.println((2^0)*2);
输出:
2
4
2^0*2 = 2
和 (2^0)*2 = 4
呢?你错误地假设了 ^
运算符的行为方式与数学中的指数运算相同。
乍一看,你可能认为 ^
被理解为 +
运算符。实际上,它表示按位 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
请查看此链接
http://bmanolov.free.fr/javaoperators.php
2^0*2=2
(2^0)*2
括号的优先级最高,因此首先计算2^0,结果为2,然后将其乘以2
*
的优先级高于^
。你可能想要的是Math.pow(2, 0) * 2
。 - Peter Lawrey