как занулить первые 4 бита в байте на java

234
13 сентября 2017, 11:46

Предположим что есть байт b = 63. В битах это будет 0011 1111. Как можно занулить первые 4 бита чтобы получилось 0000 1111? Делаю чтобы можно было приводить байты к 16-ричной системе. Для зануления последних 4х битов использую сдвиг >>.

Answer 1

Чтобы из 0b0110_0010 получить 0b0000_0010, чтобы обнулить первые 4 бита, считая слева-направо (как люди на бумаге пишут):

b &= 0b0000_1111; // & 0x0f

Чтобы из 0b0110_0010 получить 0b0000_0110, чтобы обнулить первые 4 бита, считая справа-налево:

b = (byte) ((b & 0b1111_0000) >> 4); // & 0xf0) >> 4

В данном случае нет разницы между >> и >>>.

Для байта легко напечатать все возможные значения, чтобы выбрать желаемое поведение слева или справа очищать биты.

Кстати: 63 == 0b0011_1111, а не 0b0110_0010 и даже 0x63 == 0b0110_0011 не равно 0b0110_0010.

Answer 2

Используя, например, побитовые операторы

>>>=    Сдвиг вправо с заполнением нулями с присваиванием
public static void main(String[] args) {
    byte b = 63;
    System.out.println(b);
    b >>>= 4;
    System.out.println(b);
}

Результат:

63
3
READ ALSO
Зачем в jvm нужны строковые константы?

Зачем в jvm нужны строковые константы?

Пишу небольшую jvm (не очень строго соблюдая спецификацию) и компилятор под это делоСтолкнулся с таким вот вопросом

210
Наложение цвета на изображение

Наложение цвета на изображение

Привет всем, в матане не силён нужна помощь

261
Тень текста самим текстом

Тень текста самим текстом

Добрый вечер! Нужно сделать то, что на картинкеТень текста самим текстом

220