Razumijevanje vrijednosti & 0xff u Javi

1. Pregled

0xffje broj predstavljen uheksadecimalni brojevni sustav (baza 16). Sastoji se od dva F brojevi u hex. Kao što znamo, F u heksadecimalnom ekvivalentu je 1111 u sustavu binarnih brojeva. Tako, 0xff u binarnom je 11111111.

U ovom ćemo članku otkriti kako se koristi 0xff vrijednost. Osim toga, vidjet ćemo kako ga predstaviti pomoću više vrsta podataka i kako ga koristiti s & operater. Na kraju ćemo pregledati neke prednosti povezane s njegovom upotrebom.

2. Zastupanje 0xff S različitim vrstama podataka

Java nam omogućuje definiranje brojeva koji se tumače kao hex (baza 16) pomoću 0x prefiks, a slijedi ga cjelobrojni literal.

Vrijednost 0xff ekvivalentno je 255 u decimalnoj jedinici bez potpisa, -127 u decimalnoj jedinici s potpisom i 11111111 u binarnom obliku.

Dakle, ako definiramo int varijabla s vrijednošću 0xff, od Java predstavlja cjelobrojne brojeve pomoću 32 bita, vrijednost 0xff je 255:

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

Međutim, ako definiramo a bajt varijabla s vrijednošću 0xff, budući da Java predstavlja bajt koji koristi 8 bitova i zato što je bajt potpisani tip podataka, vrijednost 0xff je -1:

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

Kao što vidimo, kada definiramo a bajt varijabla s 0xff vrijednost, moramo je spustiti na a bajt jer je domet bajt vrsta podataka je od -128 do 127.

3. Uobičajena upotreba & 0xff Operacija

The & operator izvodi bitnu operaciju I. Izlaz bitnog AND-a iznosi 1 ako su odgovarajući bitovi dvaju operanda 1. S druge strane, ako je bilo koji bit operanda 0, tada se rezultat odgovarajućeg bita procjenjuje na 0.

Od 0xff ima osam u zadnjih 8 bitova, to ga čini element identiteta za bitnu operaciju AND. Dakle, ako primijenimo x & 0xff operacija, dat će nam najnižih 8 bitova od x. Primijetite da ako je broj x je manje od 255, i dalje će biti isto. Inače, bit će to najnižih 8 bitova od x.

Općenito, & 0xff operacija nam pruža jednostavan način za izvlačenje najnižih 8 bitova iz broja. Zapravo ga možemo koristiti za izdvajanje bilo kojih 8 bitova koji nam trebaju jer možemo pomaknuti udesno bilo koji od 8 bita za koje želimo da budu najniži bitovi. Zatim ih možemo izdvojiti primjenom & 0xff operacija.

Pogledajmo primjer kako bismo objasnili neke od prednosti korištenja & 0xff detaljnije.

4. Izdvajanje RGBA koordinata u boji pomoću & 0xff

Pretpostavimo da imamo cijeli broj x, pohranjena u 32 bita, što predstavlja boju u RGBA sustavu, što znači da ima 8 bitova za svaki parametar (R, G, B i A):

  • R = 16 (00010000 u binarnom obliku)
  • G = 57 (00111001 u binarnom obliku)
  • B = 168 (10101000 u binarnom obliku)
  • A = 7 (00000111 u binarnom obliku)

Tako, x u binarnom obliku predstavljalo bi se kao 00010000 00111001 10101000 00000111 - što je ekvivalent 272214023 u decimalnom obliku.

Sad imamo svoje x vrijednost u decimalu, a mi želimo izvući vrijednost za svaki parametar.

Kao što znamo, operacija >> pomiče bitove udesno. Stoga, kada to učinimo (10000000 00000000 >> 8), to nam daje 10000000. Kao rezultat, možemo izvući vrijednost svakog parametra:

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. Zaključak

U ovom vodiču razgovarali smo o tome kako & 0xff operacija učinkovito dijeli varijablu na način koji ostavlja vrijednost samo u zadnjih 8 bitova, a zanemaruje ostatak bitova. Kao što smo vidjeli, ova je operacija posebno korisna kada pomaknemo varijablu udesno i treba izvući pomaknute bitove.

Kao i uvijek, kôd predstavljen u ovom članku dostupan je na GitHubu.