A & 0xff érték megértése a Java-ban

1. Áttekintés

0xffegy olyan szám, amelyet ahexadecimális számrendszer (16. alap). Kettőből áll F számok hatszögben. Mint tudjuk, F hatszögben egyenértékű a bináris számrendszer 1111-jével. Így, 0xff binárisban az 11111111.

Ebben a cikkben megtudjuk, hogyan kell használni a 0xff érték. Ezenkívül meglátjuk, hogyan lehet több adattípussal ábrázolni, és hogyan lehet használni a & operátor. Végül áttekintjük a használatának néhány előnyét.

2. Képviselet 0xff Különböző adattípusokkal

A Java lehetővé teszi számunkra, hogy hexaként (16. alap) értelmezett számokat definiáljunk a 0x előtag, amelyet egy egész literál követ.

Az érték 0xff egyenértékű 255 előjel nélküli tizedesben, -127 előjeles tizedesben és 11111111 binárisban.

Tehát, ha definiálunk egy int értékű változó 0xff, mivel A Java egész számokat képvisel 32 bit felhasználásával, az értéke 0xff az 255:

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

Ha azonban meghatározzuk a byte változó az értékkel 0xff, mivel a Java egy 8 bites bájtot képvisel, és mivel a bájt aláírt adattípus, az értéke 0xff értéke -1:

bájt y = (bájt) 0xff; assertEquals (-1, y);

Mint látjuk, amikor meghatározzuk a byte változó a 0xff értékre kell lebontani a byte mert a tartománya byte az adattípus az -128-tól 127-ig.

3. A & 0xff Művelet

A & operátor bitenkénti ÉS műveletet hajt végre. Az AND bitenkénti kimenete 1, ha két operandus megfelelő bitje 1. Másrészt, ha az operandusok bármelyik bitje 0, akkor a megfelelő bit eredményét 0-ra értékeljük.

Mivel 0xff nyolc van az utolsó 8 bitben, ez teszi egy azonosító elem a bitenkénti ÉS művelethez. Tehát, ha alkalmazzuk a x & 0xff művelet, ez adja a legalacsonyabb 8 bitet tőlünk x. Figyelje meg, ha a szám x kevesebb, mint 255, akkor is ugyanaz lesz. Ellenkező esetben ez lesz a legalacsonyabb 8 bit x.

Általában a & 0xff A művelet egyszerű módot kínál számunkra a legalacsonyabb 8 bit kinyerésére. Valójában felhasználhatjuk a szükséges 8 bit kinyerésére, mert a legkisebb bitnek kívánt 8 bit bármelyikét jobbra tolhatjuk. Ezután kivonhatjuk őket a & 0xff művelet.

Nézzünk meg egy példát a használat néhány előnyének ismertetésére & 0xff részletesebben.

4. Az RGBA színkoordináták kinyerése a & 0xff

Tegyük fel, hogy van egy egész számunk x, 32 bitben tárolva, amely egy színt képvisel az RGBA rendszerben, ami azt jelenti, hogy minden paraméterhez (R, G, B és A) 8 bit tartozik:

  • R = 16 (00010000 bináris formátumban)
  • G = 57 (00111001 bináris formátumban)
  • B = 168 (bináris 10101000)
  • A = 7 (00000111 bináris formátumban)

Így, x bináris formátumban 00010000 00111001 10101000 00000111 lenne ábrázolva - ez egyenértékű a decimális 272214023 értékkel.

Most megvan a miénk x tizedesértékben, és ki akarjuk vonni az egyes paraméterek értékét.

Mint tudjuk, a >> művelet biteket jobbra tol. Ezért amikor megtesszük (10000000 00000000 >> 8), akkor 10000000-et ad nekünk. Ennek eredményeként kivonhatjuk az egyes paraméterek értékét:

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. Következtetés

Ebben az oktatóanyagban megvitattuk, hogyan & 0xff A művelet hatékonyan osztja fel a változót úgy, hogy csak az utolsó 8 bit értékét hagyja meg, és a többi bit figyelmen kívül hagyja. Mint láttuk, ez a művelet különösen hasznos, ha jobbra tolunk egy változót, és ki kell húznunk az eltolt biteket.

Mint mindig, a cikkben bemutatott kód elérhető a GitHubon.