Comprensione del valore & 0xff in Java

1. Panoramica

0xff è un numero rappresentato nel sistema numerico esadecimale (base 16). È composto da duenumeri F in esadecimale. Come sappiamo, F in hex è equivalente a 1111 nel sistema numerico binario. Quindi, 0xff in binario è 11111111.

In questo articolo scopriremo come utilizzare il valore 0xff . Inoltre, vedremo come rappresentarlo utilizzando più tipi di dati e come utilizzarlo con l' operatore & . Infine, esamineremo alcuni dei vantaggi associati al suo utilizzo.

2. Rappresentare 0xff con diversi tipi di dati

Java ci consente di definire numeri interpretati come esadecimali (base 16) utilizzando il prefisso 0x , seguito da un intero letterale.

Il valore 0xff è equivalente a 255 in decimale senza segno, -127 in decimale con segno e 11111111 in binario.

Quindi, se definiamo una variabile int con un valore di 0xff , poiché Java rappresenta numeri interi utilizzando 32 bit , il valore di 0xff è 255 :

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

Tuttavia, se definiamo una variabile byte con il valore 0xff , poiché Java rappresenta un byte utilizzando 8 bit e poiché un byte è un tipo di dati con segno , il valore di 0xff è -1 :

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

Come si vede, quando definiamo una variabile byte con il valore 0xff , dobbiamo ridurla a un byte perché l'intervallo del tipo di dati byte va da -128 a 127 .

3. uso comune di & 0xFF Operation

L' operatore & esegue un'operazione AND bit per bit . L'output di AND bit per bit è 1 se i bit corrispondenti di due operandi è 1. D'altra parte, se uno dei due bit degli operandi è 0, il risultato del bit corrispondente viene valutato a 0.

Poiché 0xff ne ha otto negli ultimi 8 bit , lo rende un elemento di identità per l'operazione AND bit per bit . Quindi, se applichiamo l' operazione x & 0xff , ci darà gli 8 bit più bassi da x . Si noti che, se il numero x è inferiore a 255, sarà comunque lo stesso. Altrimenti, saranno gli 8 bit più bassi da x .

In generale, l' operazione & 0xff ci fornisce un modo semplice per estrarre gli 8 bit più bassi da un numero . Possiamo effettivamente usarlo per estrarre tutti gli 8 bit di cui abbiamo bisogno perché possiamo spostare a destra uno qualsiasi degli 8 bit che vogliamo siano i bit più bassi. Quindi, possiamo estrarli applicando l' operazione & 0xff .

Vediamo un esempio per spiegare alcuni dei vantaggi dell'utilizzo di & 0xff in modo più dettagliato.

4. Estrazione delle coordinate di colore RGBA utilizzando & 0xff

Supponiamo di avere un numero intero x , memorizzato in 32 bit, che rappresenta un colore nel sistema RGBA, il che significa che ha 8 bit per ogni parametro (R, G, B e A):

  • R = 16 (00010000 in binario)
  • G = 57 (00111001 in binario)
  • B = 168 (10101000 in binario)
  • A = 7 (00000111 in binario)

Quindi, x in binario sarebbe rappresentato come 00010000 00111001 10101000 00000111 - che è l'equivalente di 272214023 in decimale.

Ora, abbiamo il nostro valore x in decimale e vogliamo estrarre il valore per ogni parametro.

Come sappiamo, l'operazione >> sposta i bit a destra. Pertanto, quando facciamo (10000000 00000000 >> 8), ci dà 10000000. Di conseguenza, possiamo estrarre il valore di ciascun parametro :

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. conclusione

In questo tutorial, abbiamo discusso di come l' operazione & 0xff divide efficacemente una variabile in un modo che lascia solo il valore negli ultimi 8 bit e ignora il resto dei bit. Come abbiamo visto, questa operazione è particolarmente utile quando spostiamo a destra una variabile e dobbiamo estrarre i bit spostati.

Come sempre, il codice presentato in questo articolo è disponibile su GitHub.