Использование побитового & внутри оператора if

В C я могу написать оператор if

<code>if (firstInt & 1)
</code>

но когда я пытаюсь сделать то же самое в Java, компилятор сообщает мне «несовместимые типы» и говорит, что мне нужноboolean вместоint, Есть ли способ написать этот код C на Java?

 dasblinkenlight08 апр. 2012 г., 17:51
Причина, по которой это работает в C / C ++, заключается в том, что языки интерпретируют выражения внутри условных выражений, неявно сравнивая их результаты с нулем. Java очень строг в этом отношении, требуя логического выражения в условных выражениях.
 Clifford08 апр. 2012 г., 21:29
@ouah: Не в C89 это не так. Конечно, большинство компиляторов теперь поддерживают по крайней мере C99, но _Bool и stdbool.h, например, все еще являются сравнительно недавним дополнением к компилятору Microsoft.
 Clifford08 апр. 2012 г., 21:26
@ Таймон: C до сих пор имеет понятиеboolean expression что то, что упоминается здесь -not типbool.
 Taymon08 апр. 2012 г., 17:58
Это не просто неявно; C даже неhave логический тип.
 ouah08 апр. 2012 г., 18:03
@Taymon C имеет логический тип_Bool и макросbool вstdbool.h который расширяется до_Bool

Ответы на вопрос(2)

кое выражение (хотя я бы сказал, что это плохая идея), где ноль равен false, а любое ненулевое значение - true.

В Java это недопустимо, поэтому вы должны сделать выражение явно логическим, сравнивая целочисленный результат с некоторым другим целочисленным значением или выражением, используя оператор сравнения.

Решение Вопроса

Любое из следующего должно работать для вас:

if ((firstInt & 1) != 0)
if ((firstInt & 1) > 0)
if ((firstInt & 1) == 1)
 08 апр. 2012 г., 21:24
Я бы сказал, что эта форма является хорошей практикой в C и C ++.
 08 апр. 2012 г., 17:47
+1. Могли бы также сделать(firstInt & 1) == 1.
 user131065008 апр. 2012 г., 17:56
Спасибо, это сработало. Я приму ваш ответ, как только он позволит.
 08 апр. 2012 г., 17:47
Обратите внимание, что паренсы (которые я добавил) необходимы для правильности. В Java операторы сравнения связываются более тесно, чем двоичные побитовые операторы.

Ваш ответ на вопрос