簡體   English   中英

2^0*2 和 (2^0)*2 的區別?

[英]Difference between 2^0*2 and (2^0)*2?

我預計兩種表達都會給出相同的答案:

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 是互斥析取,僅當輸入不同時才輸出真。 這是整個技巧:

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

  • 具有更高的優先級,n ^ 所以首先你將評估 0*2,即 0,然后將其與 2 進行異或,結果為 2

(2^0)*2

() 具有更高的優先級,因此您將首先評估 2^0 然后是 2,然后將其乘以 2

運算符優先級

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM