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


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

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

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

}

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

5 68

5 ответов:

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

установить немного:

myByte |= 1 << bit;

снимите:

myByte &= ~(1 << bit);

просто в дополнение Джон и driis‘ ответ

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

    myByte ^= 1 << bit;

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

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

см. класс java.утиль.Битсет, который делает работу за вас.

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