Предположим что есть байт b = 63. В битах это будет 0011 1111. Как можно занулить первые 4 бита чтобы получилось 0000 1111? Делаю чтобы можно было приводить байты к 16-ричной системе. Для зануления последних 4х битов использую сдвиг >>.
Чтобы из 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
.
Используя, например, побитовые операторы
>>>= Сдвиг вправо с заполнением нулями с присваиванием
public static void main(String[] args) {
byte b = 63;
System.out.println(b);
b >>>= 4;
System.out.println(b);
}
Результат:
63
3
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пытаюсь развернуть проект в WildFly-100
Пишу небольшую jvm (не очень строго соблюдая спецификацию) и компилятор под это делоСтолкнулся с таким вот вопросом
Добрый вечер! Нужно сделать то, что на картинкеТень текста самим текстом