Pochopenie hodnoty & 0xff v jazyku Java

1. Prehľad

0xffje číslo zastúpené vhexadecimálna číselná sústava (základ 16). Skladá sa z dvoch F čísla v hex. Ako vieme, F v hex je ekvivalentom 1111 v binárnej číselnej sústave. Takže 0xff v binárnom formáte je 11111111.

V tomto článku zistíme, ako používať 0xff hodnotu. Okrem toho uvidíme, ako to reprezentovať pomocou viacerých dátových typov a ako ju používať s & operátor. Na záver preskúmame niektoré výhody spojené s jeho používaním.

2. Zastupovanie 0xff S rôznymi typmi údajov

Java nám umožňuje definovať čísla interpretované ako hex (základ 16) pomocou znaku 0x predpona, za ktorou nasleduje celé číslo.

Hodnota 0xff je ekvivalentná 255 v desatinnom mieste bez znamienka, -127 v desatinnom mieste s podpisom a 11111111 v binárnom formáte.

Takže, ak definujeme int premenná s hodnotou 0xff, odkedy Java predstavuje celé číslo pomocou 32 bitov, hodnota 0xff je 255:

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

Ak však definujeme a bajt premenná s hodnotou 0xff, pretože Java predstavuje bajt pomocou 8 bitov a pretože bajt je podpísaný údajový typ, hodnota 0xff je -1:

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

Ako vidíme, keď definujeme a bajt premenná s 0xff hodnotu, musíme to znížiť na a bajt pretože rozsah bajt dátový typ je od -128 do 127.

3. Bežné použitie & 0xff Prevádzka

The & operátor vykonáva bitovú operáciu AND. Výstup bitového AND je 1, ak zodpovedajúce bity dvoch operandov sú 1. Na druhej strane, ak je jeden bit operandov 0, potom sa výsledok zodpovedajúceho bitu vyhodnotí na 0.

Odkedy 0xff má osem z posledných 8 bitov, robí to prvok identity pre bitovú operáciu AND. Ak teda použijeme x & 0xff prevádzka, dá nám najnižších 8 bitov od X. Všimnite si, že ak počet X je menej ako 255, bude to stále to isté. V opačnom prípade to bude najmenej 8 bitov od X.

Všeobecne platí, že & 0xff operácia nám poskytuje jednoduchý spôsob, ako extrahovať najnižších 8 bitov z čísla. Môžeme ho vlastne použiť na extrahovanie ľubovoľných 8 bitov, ktoré potrebujeme, pretože môžeme posúvať ľubovoľných 8 bitov, ktoré chceme mať, k najnižším bitom. Potom ich môžeme extrahovať aplikáciou & 0xff prevádzka.

Pozrime sa na príklad, ktorý vysvetlí niektoré výhody používania & 0xff podrobnejšie.

4. Extrahovanie farebných súradníc RGBA pomocou & 0xff

Predpokladajme, že máme celé číslo X, uložený v 32 bitoch, ktorý predstavuje farbu v systéme RGBA, čo znamená, že má 8 bitov pre každý parameter (R, G, B a A):

  • R = 16 (binárne 000 000 000)
  • G = 57 (00111001 v binárnom formáte)
  • B = 168 (10101000 v binárnom formáte)
  • A = 7 (00000111 v binárnom formáte)

Takže X v binárnom formáte by bol reprezentovaný ako 00010000 00111001 10101000 00000111 - čo je ekvivalent 272214023 v desatinnej čiarke.

Teraz máme svoje X hodnota v desatinnom čísle a chceme extrahovať hodnotu pre každý parameter.

Ako vieme, operácia >> posúva bity doprava. Preto keď to urobíme (10000000 00000000 >> 8), dá nám to 10000000. Vo výsledku môžeme extrahovať hodnotu každého 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. Záver

V tomto tutoriáli sme diskutovali o tom, ako & 0xff operácia efektívne rozdeľuje premennú spôsobom, ktorý ponecháva iba hodnotu za posledných 8 bitov a zvyšok bitov ignoruje. Ako sme videli, táto operácia je obzvlášť užitočná, keď posúvame správne premennú a je potrebné extrahovať posunuté bity.

Ako vždy, kód uvedený v tomto článku je k dispozícii na GitHub.