2017-06-05 138 views
-1

我不知道什麼是錯做,但這個代碼是給我這個錯誤:錯誤的操作數類型的二進制運算符「& &」我應該如何解決這個錯誤:錯誤的操作數類型的二進制運算符「&&」

if((n%2==0) && (n>>6) && (n<<20)) 
{ 

      ans = "Not Weird"; 
     } 
+4

你覺得'n >> 6'和'n << 20'做什麼?他們轉移位。它們不會解析爲一個布爾值來檢查true或false值。你可能會想到'>'和'<'。 – AntonH

+0

感謝它的工作! –

回答

1

大於只是>,而不是>>,這是一個移位操作符。相同的小於和<<<

移位運算符返回一個整數類型,&&預計雙方都是boolean類型。有關移位運算符的更多信息,請參見此問題:How do shift operators work in Java?

-1

此處>>是帶符號的右移運算符。例如

int x = -4; 
    System.out.println(x>>1); 
    int y = 4; 
    System.out.println(y>>1); 

會給你

-2 
2 

這同樣適用於左移< <運營商。

你想檢查大於或小於。所以爲此目的,您需要'>'或'<'運營商。 所以正確的條件檢查會像

if((n%2==0) && (n>6) && (n<20)) { 
     ans = "Not Weird" 
    } 
+0

不是投票者,但是看着你給出的這個答案和其他答案,你可以給出正確的代碼,但很少沒有解釋。詳細闡述OP爲什麼會出現錯誤或解釋您的更正會大大降低人們對您的答案進行低估的可能性。 – AntonH

+0

@AntonH感謝您的建議 – Binu

+0

不是一個downvoter(來自低質量的帖子審查隊列在這裏):一個好的答案不只是代碼,請詳細說明這是什麼,與原始有什麼不同,什麼是錯誤的和* *爲什麼**這是錯的 – Zoe

0

>><<是位運算符。它們評估爲整型,Java不會將整型隱式轉換爲boolean類型,這是&&參數和if條件所必需的。

所以,你應該重寫

if (n > 6 && n < 20 && n % 2 == 0) 

我已經採取去除多餘的括號和自由重新排序,從而計算上更便宜><首先評估報表,以及更昂貴的%只有在必要時。這是一個微型優化,但向讀者展示了你的代碼,你知道你在做什麼。

相關問題