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);
Однако, если мы определим байтовую
переменную со значением 0xff
, поскольку Java представляет байт с помощью 8 бит и поскольку байт является типом данных со знаком , значение 0xff
равно -1 :
byte y = (byte) 0xff;
assertEquals(-1, y);
Как мы видим, когда мы определяем байтовую
переменную со значением 0xff
, нам нужно преобразовать ее в байт
, потому что диапазон типа данных байта
составляет от -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. Извлечение цветовых координат RGBA с помощью & 0xff
Предположим, что у нас есть целое число x
, хранящееся в 32 битах, которое представляет цвет в системе RGBA, что означает, что у него есть 8 битов для каждого параметра (R, G, B и A):
- R = 16 (00010000 в двоичном формате)
- G = 57 (00111001 в двоичном формате)
- B = 168 (10101000 в двоичном формате)
- A = 7 (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 .