Рубрики
Без рубрики

Понимание значения & 0xff в Java

Узнайте, как использовать значение 0xff с побитовым оператором И в Java.

Автор оригинала: baeldung.

1. Обзор

0xff – это число, представленное в шестнадцатеричной системе счисления (база 16). Он состоит из двух F чисел в шестнадцатеричном формате. Как мы знаем, F в шестнадцатеричном формате эквивалентно 1111 в двоичной системе счисления. Итак, 0xff в двоичном формате-это 11111111.

В этой статье мы узнаем, как использовать значение 0xff . Кроме того, мы увидим, как представить его с помощью нескольких типов данных и как использовать его с оператором & . Наконец, мы рассмотрим некоторые преимущества, связанные с его использованием.

2. Представление 0xff С Различными Типами Данных

Java позволяет нам определять числа, интерпретируемые как шестнадцатеричные (основание 16), с помощью префикса 0x , за которым следует целочисленный литерал.

Значение 0xff эквивалентно 255 в десятичной системе без знака, -127 в десятичной системе со знаком и 11111111 в двоичной системе.

Итак, если мы определим переменную int со значением 0xff , поскольку Java представляет целые числа, используя 32 бита , значение 0xff равно 255 :

int x = 0xff;
assertEquals(255, x);

Однако, если мы определим переменную byte со значением 0xff , поскольку Java представляет байт с использованием 8 бит и поскольку байт является типом данных со знаком , значение 0xff равно -1 :

byte y = (byte) 0xff;
assertEquals(-1, y);

Как мы видим, когда мы определяем переменную byte со значением 0xff , нам нужно понизить ее до byte , потому что диапазон типа данных byte составляет от -128 до 127 .

3. Общее использование операции & 0xff

Оператор & выполняет побитовую операцию И . Выход побитового И равен 1, если соответствующие биты двух операндов равны 1. С другой стороны, если любой бит операндов равен 0, то результат соответствующего бита оценивается как 0.

Поскольку 0xff имеет восемь единиц в последних 8 битах , это делает его элементом идентификации для побитовой операции И . Итак, если мы применим операцию x & 0xff , она даст нам самые низкие 8 бит из x . Обратите внимание, что если число x меньше 255, оно все равно останется прежним. В противном случае это будет самый низкий 8 бит из x .

В общем случае операция & 0xff предоставляет нам простой способ извлечь наименьшие 8 бит из числа . На самом деле мы можем использовать его для извлечения любых 8 битов, которые нам нужны, потому что мы можем сдвинуть вправо любой из 8 битов, которые мы хотим сделать самыми низкими битами. Затем мы можем извлечь их, применив операцию & 0xff .

Давайте рассмотрим пример, чтобы более подробно объяснить некоторые преимущества использования & 0xff .

4. Извлечение Цветовых Координат RGB С помощью & 0xff

Предположим , что у нас есть целое число x , хранящееся в 32 битах, которое представляет цвет в системе RGBA, что означает, что оно имеет 8 бит для каждого параметра (R, G, B и A):

  • R (00010000 в двоичном формате)
  • G (00111001 в двоичном формате)
  • B (10101000 в двоичном формате)
  • A (00000111 в двоичном формате)

Так, x в двоичном формате будет представлено как 00010000 00111001 10101000 00000111 — что эквивалентно 272214023 в десятичной системе счисления.

Теперь у нас есть значение x в десятичной системе счисления, и мы хотим извлечь значение для каждого параметра.

Как мы знаем, операция >> сдвигает биты вправо. Поэтому, когда мы это делаем (10000000 00000000 >> 8), это дает нам 10000000. В результате мы можем извлечь значение каждого параметра :

int rgba = 272214023;

int r = rgba >> 24 & 0xff;
assertEquals(16, r);

int g = rgba >> 16 & 0xff;
assertEquals(57, g);

int b = rgba >> 8 & 0xff;
assertEquals(168, b);

int a = rgba & 0xff;
assertEquals(7, a);

5. Заключение

В этом уроке мы обсудили, как операция & 0xff эффективно делит переменную таким образом, что оставляет только значение в последних 8 битах и игнорирует остальные биты. Как мы уже видели, эта операция особенно полезна, когда мы сдвигаем переменную вправо и нам нужно извлечь сдвинутые биты.

Как всегда, код, представленный в этой статье, доступен на GitHub .