2^0*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 呢?

请限制自己只使用一种语言。询问两种语言的问题太宽泛了。 - Stephen C
* 的优先级高于 ^。你可能想要的是 Math.pow(2, 0) * 2 - Peter Lawrey
3个回答

10

你错误地假设了 ^ 运算符的行为方式与数学中的指数运算相同。

乍一看,你可能认为 ^ 被理解为 + 运算符。实际上,它表示按位 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

2

请查看此链接

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

2^0*2=2

  • 乘号的优先级高于异或符,所以首先计算0*2,结果为0,然后将其与2异或,结果为2

(2^0)*2

括号的优先级最高,因此首先计算2^0,结果为2,然后将其乘以2


我在哪里明确提到了它是幂运算符?我提到它是异或运算符。 - Amer Qarabsa
不要检查链接,它指定了“^”的不同含义。 - Amer Qarabsa

-3

运算符优先级

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接