我不知道什麼是錯做,但這個代碼是給我這個錯誤:錯誤的操作數類型的二進制運算符「& &」我應該如何解決這個錯誤:錯誤的操作數類型的二進制運算符「&&」
if((n%2==0) && (n>>6) && (n<<20))
{
ans = "Not Weird";
}
我不知道什麼是錯做,但這個代碼是給我這個錯誤:錯誤的操作數類型的二進制運算符「& &」我應該如何解決這個錯誤:錯誤的操作數類型的二進制運算符「&&」
if((n%2==0) && (n>>6) && (n<<20))
{
ans = "Not Weird";
}
大於只是>
,而不是>>
,這是一個移位操作符。相同的小於和<
與<<
。
移位運算符返回一個整數類型,&&
預計雙方都是boolean類型。有關移位運算符的更多信息,請參見此問題:How do shift operators work in Java?
此處>>是帶符號的右移運算符。例如
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"
}
>>
和<<
是位運算符。它們評估爲整型,Java不會將整型隱式轉換爲boolean
類型,這是&&
參數和if
條件所必需的。
所以,你應該重寫
if (n > 6 && n < 20 && n % 2 == 0)
我已經採取去除多餘的括號和自由重新排序,從而計算上更便宜>
和<
首先評估報表,以及更昂貴的%
只有在必要時。這是一個微型優化,但向讀者展示了你的代碼,你知道你在做什麼。
你覺得'n >> 6'和'n << 20'做什麼?他們轉移位。它們不會解析爲一個布爾值來檢查true或false值。你可能會想到'>'和'<'。 – AntonH
感謝它的工作! –