Java: побитовая операция для проверки флагов

Я пытаюсь проверить, имеет ли число второй битовый флаг (т.е. 0000 0010). Мой код выглядит следующим образом:

int flags = Integer.parseInt(fields[1]);
String strflags = Integer.toBinaryString(flags);
flags = Integer.parseInt(strflags);
int secondBitTest = Integer.parseInt("00000010", 2);
if((flags & secondBitTest) == 2) {
    System.out.println("YES");
}

Однако я думаю, что могу делать это неправильно, поскольку, когда я пытаюсь ввести 147, ничего не возвращается.


person Lindsay L    schedule 10.08.2015    source источник
comment
Почему вы просто не используете стандартные бинарные операторы? flags & 0b10?   -  person SBI    schedule 10.08.2015


Ответы (1)


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

if (x & (1<<n) != 0) {
  //n-th bit is set
}
else {
  //n-th bit is not set
}

x — это число, которое вы хотите проверить, а n — бит, который вы хотите проверить. Алгоритм работает, сдвигая число 1 влево на n и объединяя его по И с x.

person atarw    schedule 10.08.2015
comment
Вы получили приоритет & и неправильное сравнение (лучше использовать != 0). - person starblue; 22.08.2015