2016-04-20 75 views
-2

對於nint類型,你怎麼能重鑄表達如何編寫if(n&1)?

(n & 1) 

在一個if語句中使用時的Java編譯?在C和C++中編譯好。

事情我已經嘗試:

if (n & 0x1) 
if (n & 0x1 == 0x1) 
if (n & 0x1 == true) 

但是編譯器不喜歡這一切。

+0

爲什麼downvotes?我真的一直在努力。 –

+3

這個問題缺乏明確性:我只是猜測你在'if'語句或類似語句中使用了這個。 '(n&1)'是Java中的有效表達式。 – Bathsheba

+0

我猜(這是一個猜測,因爲我沒有downvote),這('n&1'導致一個'int'和Java不隱式地將'int'轉換爲'boolean')被大多數基本教程覆蓋,所以快速搜索可能已經足夠。 – Thomas

回答

5

請記住您的運營商優先請!

((n & 1) == 1)會做到這一點。 (&具有優先級低於==,所以你需要的括號內。)

Java不隱式轉換爲bool(其中C++一樣),而relationals不計算0和1,因爲他們在C.

+1

[參考資料](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html)。 – Maroun

+2

謝謝@MarounMaroun:現在OP應該打印出來並粘在樓下廁所的門上。 – Bathsheba

2

(n & 1)是返回一個表達式爲0或1

如果你想將它轉換爲布爾值(在條件中使用),使用方法:

if ((n & 1) == 1) { 

} 

這將評估(n & 1) == 1true如果(n & 1) == 1

+0

'if((n&1)== 1)'不計算任何東西,因爲'if'是一個語句。只是'(n&1)== 1',然而,評估爲'真'。 – marstran

+0

@marstran我想我應該包括括號使它更清晰。 – Eran

+0

事情是,如果你想「轉換」爲一個布爾值,你可以使用'boolean b =(n&1)== 1'。你不需要if語句。 – marstran

2

表達式沒有任何問題,除非需要在語句中分配或使用它,否則您將得到「錯誤:不是語句」。

表達式的結果是一個int,所以此工程,例如:

int x = (n & 1); 
+0

直到OP最後澄清纔是最純粹的答案;加一。 – Bathsheba