1. Información general
0xff es un número representado en el sistema numérico hexadecimal (base 16). Está compuesto por dosnúmeros F en hexadecimal. Como sabemos, F en hexadecimal es equivalente a 1111 en el sistema numérico binario. Entonces, 0xff en binario es 11111111.
En este artículo, descubriremos cómo usar el valor 0xff . Además, veremos cómo representarlo usando múltiples tipos de datos y cómo usarlo con el operador & . Finalmente, revisaremos algunos de los beneficios asociados con su uso.
2. Representar 0xff con diferentes tipos de datos
Java nos permite definir números interpretados como hexadecimales (base 16) usando el prefijo 0x , seguido de un literal entero.
El valor 0xff es equivalente a 255 en decimal sin signo, -127 en decimal con signo y 11111111 en binario.
Entonces, si definimos una variable int con un valor de 0xff , dado que Java representa números enteros usando 32 bits , el valor de 0xff es 255 :
int x = 0xff; assertEquals(255, x);
Sin embargo, si definimos una variable de byte con el valor 0xff , dado que Java representa un byte usando 8 bits y debido a que un byte es un tipo de datos con signo , el valor de 0xff es -1 :
byte y = (byte) 0xff; assertEquals(-1, y);
Como vemos, cuando definimos una variable de byte con el valor 0xff , necesitamos reducirla a un byte porque el rango del tipo de datos de byte es de -128 a 127 .
3. Uso común de la operación & 0xff
El operador & realiza una operación AND bit a bit . La salida de AND bit a bit es 1 si los bits correspondientes de dos operandos son 1. Por otro lado, si cualquiera de los bits de los operandos es 0, entonces el resultado del bit correspondiente se evalúa a 0.
Dado que 0xff tiene ocho unos en los últimos 8 bits , lo convierte en un elemento de identidad para la operación AND bit a bit . Entonces, si aplicamos la operación x & 0xff , nos dará los 8 bits más bajos de x . Observe que, si el número x es menor que 255, seguirá siendo el mismo. De lo contrario, serán los 8 bits más bajos de x .
En general, la operación & 0xff nos proporciona una forma sencilla de extraer los 8 bits más bajos de un número . De hecho, podemos usarlo para extraer los 8 bits que necesitemos porque podemos desplazar a la derecha cualquiera de los 8 bits que queremos que sean los bits más bajos. Luego, podemos extraerlos aplicando la operación & 0xff .
Veamos un ejemplo para explicar algunos de los beneficios de usar & 0xff con más detalle.
4. Extracción de coordenadas de color RGBA mediante & 0xff
Supongamos que tenemos un número entero x , almacenado en 32 bits, que representa un color en el sistema RGBA, lo que significa que tiene 8 bits para cada parámetro (R, G, B y A):
- R = 16 (00010000 en binario)
- G = 57 (00111001 en binario)
- B = 168 (10101000 en binario)
- A = 7 (00000111 en binario)
Entonces, x en binario se representaría como 00010000 00111001 10101000 00000111, que es el equivalente a 272214023 en decimal.
Ahora, tenemos nuestro valor x en decimal y queremos extraer el valor de cada parámetro.
Como sabemos, la operación >> desplaza bits a la derecha. Por lo tanto, cuando lo hacemos (10000000 00000000 >> 8), nos da 10000000. Como resultado, podemos extraer el valor de cada parámetro :
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. Conclusión
En este tutorial, hemos discutido cómo la operación & 0xff divide efectivamente una variable de una manera que deja solo el valor en los últimos 8 bits e ignora el resto de los bits. Como hemos visto, esta operación es especialmente útil cuando desplazamos a la derecha una variable y necesitamos extraer los bits desplazados.
Como siempre, el código presentado en este artículo está disponible en GitHub.