2016-07-11 55 views
-6

我正在解決Hackerrank問題'最大化xor'。 (https://www.hackerrank.com/challenges/maximizing-xor運算符^未定義爲參數類型int,布爾值

我已經使用'if'語句來檢查i xor j是否大於'max',如代碼所示。

static int maxXor(int l, int r) { 
    int max=0; 
    for(int i=l;i<r;i++) 
     for(int j=l;j<r;j++) 
     { 
      if(i^j>max)/*error part*/ 
      max=i^j; 
     } 
    return max; 
} 

但是,爲什麼我得到這個錯誤?

操作^未定義的參數類型INT,布爾」

+1

雖然其他人已經回答了您的問題,但請注意,雖然此解決方案會通過,但它不是最有效的解決方案。如果您嘗試去思考XOR在某個層面上做了什麼,那麼可以讓它運行得更快。 – MathBunny

回答

5

你需要把括號周圍的表達:

if ((i^j) > max) 

Java's operator precedence table, XOR運算符^的優先級低於不等式運算符>

因此,您的原始書面表達i^j > max將被解釋爲i^(j > max)。但是在這裏,類型不正確:iint,但(j > max)boolean。這就是你得到編譯器錯誤的原因。作爲一個方面說明,如果你用C/C++編譯這個代碼,它會編譯,但它會運行奇怪的結果。這是因爲在C/C++中,在這種情況下適用相同的運算符優先級規則,但bool將轉換爲0或1的int,然後XOR會繼續。這將是危險的和錯誤的。 Java編譯器阻止您將intboolean異或,這將是一種無意義的操作。

+0

是的,這是因爲在'^'之前評估'>'。請參閱https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html – Zircon

3

看看Java的運算符優先級:http://bmanolov.free.fr/javaoperators.php。正如你所看到的,整數比較(<,>)優先於xor。所以,你的發言是Java解釋爲

if (i^(j>max)) 

所以你必須手動才能達到您想要的比較括號添加到您的發言

if ((i^j) > max) 

相關問題