Сила 2-битного оператора в Java? - PullRequest
1 голос
/ 20 мая 2011

У меня есть переменная int для сохранения опции, которая может не включать ни одной, ни одной, ни нескольких подопций, подобных этой:

public static final int OPERATOR_PLUS = 1;
public static final int OPERATOR_SUBTRACT = 2;
public static final int OPERATOR_MULTIPLY = 4;
public static final int OPERATOR_DIVIDE = 8;

И мне нужна функция, которая будет возвращать, если этот вариант содержит подопцию. Я попробовал:

return (Operator & Operators);
return (Operator && Operators);

Но Eclipse говорит, что оба они являются грамматическими ошибками (оператор и оператор - int). Подскажите пожалуйста, как использовать оператор AND Bit в Java. В .NET я использую: Operator And Operators.

Спасибо.

Ответы [ 6 ]

5 голосов
/ 20 мая 2011

Java не будет обрабатывать int как boolean (в отличие от C ++, AFAIU). Попробуйте

return (Operator & Operators) > 0;
2 голосов
/ 20 мая 2011

Каков тип возврата вашего метода? Если это boolean, то вы должны написать это так:

public boolean hasOperatorBit() {
    return (Operator & Operators) != 0;
}
0 голосов
/ 20 мая 2011
public boolean checkOperator(int operators, int operator) {
 return (operators & operator) != 0;
}

Уроки для лучшего понимания.

0 голосов
/ 20 мая 2011

Первая строка будет правильной, чтобы проверить это, тогда как вы можете проверить только одну возможность оператора за один раз.Кроме того, вы должны проверить, что результат не равен 0, чтобы быть правильным.

return ((operator & sub_operator) != 0);
0 голосов
/ 20 мая 2011

Вам нужно сравнить свою переменную с рассматриваемым оператором, используя побитовое И, чтобы увидеть, эквивалентно ли это оператору.

Например,

return OPERATOR_PLUS & operator == OPERATOR_PLUS;

Потому что, если вы думаете о том, как работает побит, вы хотите сказать, содержит ли моя переменная битовый флаг для оператора.

0 голосов
/ 20 мая 2011

Первый - это оператор побитовый AND, и он должен иметь правильный синтаксис, если тип возвращаемого значения вашего метода равен int или что-то эквивалентное.Если вам нужен логический тип возврата, вам нужно сделать что-то вроде return (operator & operators) != 0;.

Второй недопустим;это логический оператор AND, поэтому оба его аргумента должны быть boolean.

...