Установить определенный бит в байте - PullRequest
76 голосов
/ 13 января 2011

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

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

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

}

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

Ответы [ 5 ]

129 голосов
/ 13 января 2011

Используйте побитовые операторы ИЛИ (|) и И (&).Чтобы установить бит, а именно установите бит на 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 / побитовые операторы

64 голосов
/ 13 января 2011

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

myByte |= 1 << bit;

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

myByte &= ~(1 << bit);
23 голосов
/ 13 января 2011

Просто для дополнения ответ Джона и driis ‘answer

Для переключения (инвертирования) немного

    myByte ^= 1 << bit;
10 голосов
/ 13 января 2011

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

7 голосов
/ 22 мая 2015

Пожалуйста, ознакомьтесь с классом java.util.BitSet, который выполняет эту работу за вас.

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

...