Устанавливать определенный бит в байте

Я пытаюсь установить биты в переменной байта Java. Он обеспечивает такие методы, как .setBit(i). Кто-нибудь знает, как я могу это понять?

Я могу перебирать побитно по заданному байту:

if( (my_byte & (1 << i)) == 0 ){

}

Однако я не могу установить эту позицию в 1 или 0, могу ли я?

Ответ 1

Используйте побитовые операторы OR (|) и AND (&). Чтобы установить бит, а именно, установите бит в pos 1:

my_byte = my_byte | (1 << pos);   // longer version, or
my_byte |= 1 << bit;              // shorthand

Чтобы снять бит или установить его на 0:

my_byte = my_byte & ~(1 << pos);  // longer version, or
my_byte &= ~(1 << bit);           // shorthand

Примеры см. В разделе Расширенные Java/побитовые операторы.

Ответ 2

Чтобы установить бит:

myByte |= 1 << bit;

Чтобы очистить его:

myByte &= ~(1 << bit);

Ответ 3

Просто чтобы дополнить ответ Джона и ответ driis

Чтобы переключить (инвертировать) бит

    myByte ^= 1 << bit;

Ответ 4

Необходимая техника заключается в том, чтобы изолировать выбранный бит и установить или очистить его. У вас уже есть выражение, чтобы изолировать бит, так как вы используете это, чтобы проверить его выше. Вы можете установить бит путем его ИЛИ, или очистить бит поразрядным И с 1 дополнением бит.

boolean setBit;
my_byte = setBit
          ? myByte | (1 << i)
          : myByte & ~(1 << i);

Ответ 5

См. класс java.util.BitSet, который выполняет эту работу для вас.

Чтобы установить: myByte.set(bit); Для reset: myByte.clear(bit); Заполнить bool: myByte.set(bit, b); Чтобы получить bool: b = myByte.get(bit); Получить растровое изображение: byte bitMap = myByte.toByteArray()[0];