Устанавливать определенный бит в байте
Я пытаюсь установить биты в переменной байта 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];