2016-04-20 3 views
-2

Для int типа n, как можно переделать выражениеКак написать if (n & 1)?

(n & 1) 

для компиляции в Java при использовании в if заявлении? В C и C++ он компилируется отлично.

Что я пробовал:

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

но компилятор не любит все эти.

+0

Почему downvotes? Я искренне борется с этим некоторое время. –

+3

Вопрос не имеет ясности: я только догадывался, что вы используете это в инструкции 'if' или аналогичной. '(n & 1)' является допустимым выражением в Java. – Bathsheba

+0

Я бы предположил (и это предположение, так как я не спустил вниз), что это ('n & 1', приводящее к' int' и Java, неявно конвертирующее 'int' в' boolean'), покрывается большинством основных обучающих программ, поэтому быстрого поиска могло быть достаточно. – Thomas

ответ

5

Помните, что ваш оператор имеет приоритет, пожалуйста!

((n & 1) == 1) будет делать это. (& имеет более низкий приоритет, чем == так что вам нужно круглые скобки.)

Java не неявно приведен к bool (который C++ делает), и relationals не оценивают в 0 и 1, как они делают в С.

+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) == 1 до true если (n & 1) == 1.

+0

'if ((n & 1) == 1)' ничего не оценивает, потому что 'if' является выражением. Просто '(n & 1) == 1', однако, оценивает значение' true'. – marstran

+0

@marstran Думаю, я должен был включить фигурные скобки, чтобы сделать его более ясным. – Eran

+0

Дело в том, что если вы хотите «преобразовать» его в логическое, вы используете 'boolean b = (n & 1) == 1'. Вам не нужен оператор if. – marstran

2

В выражении нет ничего плохого, за исключением того, что оно должно быть назначено или иным образом использовано в инструкции или вы получите «сообщение об ошибке: не утверждение».

Результатом выражения является int, так что это работает, например:

int x = (n & 1); 
+0

Является самым чистым ответом до тех пор, пока, наконец, ОП не выяснится; плюс один. – Bathsheba

Смежные вопросы