2 ^ 0 * 2和(2 ^ 0)* 2之间的区别?

Pra*_* VL 4 java expression operators

我期望两个表达式都能给出相同的答案:

System.out.println(2^0*2);
System.out.println((2^0)*2);
Run Code Online (Sandbox Code Playgroud)

输出:

2
4
Run Code Online (Sandbox Code Playgroud)

是否有一个具体原因2^0*2 = 2(2^0)*2 = 4

Nik*_*las 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
Run Code Online (Sandbox Code Playgroud)

XOR是互斥析取,仅当输入不同时才输出true。这是整个窍门:

2^0 = 2 XOR 0 = (0010) XOR (0000) = (0010) = 2 
2^4 = 2 XOR 4 = (0010) XOR (0100) = (0110) = 6
Run Code Online (Sandbox Code Playgroud)