2016-04-16 3 views
8

Почему выражение n&1 == 0 всегда возвращает false, где n является целым числом?Почему «n & 1 == 0» всегда возвращает false?

Я хочу использовать побитовое управление для определения того, является ли n равномерным. Однако он всегда возвращает false. (Клион также подсказал мне, что он всегда возвращает false).

Более того, он работает, когда я использую n&1 != 0, чтобы определить, является ли n нечетным.

+4

http://en.cppreference.com/w/cpp/language/operator_precedence –

+1

Если '(n & 1) == false', то это четное число и нечетное значение в противном случае. В g ++ скомпилируйте с опцией '-Wall', чтобы он дал вам предупреждение для' n & 1 == 0' для размещения скобок. – iammilind

+0

, как у вас есть это выглядит как 'n & (1 == 0)' так что '1 == 0' всегда 0, мы получаем' n & 0', который всегда 0 – JackVanier

ответ

19

Его из-за приоритета оператора.

== имеет более высокий приоритет, чем оператор &, поэтому 1 == 0 получает оценку сначала до 0. Затем выполняется бит wise AND, который в конечном итоге возвращает false.

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