Forståelse af & 0xff-værdien i Java

1. Oversigt

0xffer et tal repræsenteret ihexadecimalt numeriske system (base 16). Den består af to F tal i hex. Som vi ved, F i hex svarer til 1111 i det binære tal-system. Så, 0xff i binær er 11111111.

I denne artikel finder vi ud af, hvordan du bruger 0xff værdi. Derudover vil vi se, hvordan man repræsenterer det ved hjælp af flere datatyper, og hvordan man bruger det med & operatør. Endelig gennemgår vi nogle af fordelene ved at bruge det.

2. Repræsenterer 0xff Med forskellige datatyper

Java giver os mulighed for at definere tal fortolket som hex (base 16) ved hjælp af 0x præfiks efterfulgt af et heltal bogstaveligt.

Værdien 0xff svarer til 255 i usigneret decimal, -127 i underskrevet decimal og 11111111 i binær.

Så hvis vi definerer en int variabel med en værdi på 0xff, siden Java repræsenterer heltal ved hjælp af 32 bits, værdien af 0xff er 255:

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

Men hvis vi definerer en byte variabel med værdien 0xff, da Java repræsenterer en byte ved hjælp af 8 bits, og fordi en byte er en signeret datatype, værdien af 0xff er -1:

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

Som vi ser, når vi definerer en byte variabel med 0xff værdi, skal vi nedskyde den til en byte fordi rækkevidden af byte datatype er fra -128 til 127.

3. Almindelig anvendelse af & 0xff Operation

Det & operatøren udfører en bitvis OG-operation. Outputtet fra bitvis AND er 1, hvis de tilsvarende bits i to operander er 1. På den anden side, hvis hver bit af operanderne er 0, så vurderes resultatet af den tilsvarende bit til 0.

Siden 0xff har otte i de sidste 8 bits, det gør det til et identitetselement til bitvis OG-operation. Så hvis vi anvender x & 0xff operation, det giver os de laveste 8 bits fra x. Bemærk, at hvis nummeret x er mindre end 255, vil det stadig være det samme. Ellers er det de laveste 8 bits fra x.

Generelt er det & 0xff operation giver os en enkel måde at udtrække de laveste 8 bits fra et tal. Vi kan faktisk bruge det til at udtrække de 8 bits, vi har brug for, fordi vi kan skifte til højre for de 8 bits, vi vil være de laveste bits. Derefter kan vi udtrække dem ved at anvende & 0xff operation.

Lad os se et eksempel for at forklare nogle af fordelene ved at bruge & 0xff mere detaljeret.

4. Udpakning af RGBA-farvekoordinater ved hjælp af & 0xff

Lad os antage, at vi har et heltal x, gemt i 32 bits, der repræsenterer en farve i RGBA-systemet, hvilket betyder, at den har 8 bits for hver parameter (R, G, B og A):

  • R = 16 (00010000 i binær)
  • G = 57 (00111001 i binær)
  • B = 168 (10101000 i binær)
  • A = 7 (00000111 i binær)

Så, x i binær vil blive repræsenteret som 00010000 00111001 10101000 00000111 - hvilket svarer til 272214023 i decimal.

Nu har vi vores x værdi i decimal, og vi vil udtrække værdien for hver parameter.

Som vi ved, skifter >> operationen bits til højre. Derfor, når vi gør det (10000000 00000000 >> 8), giver det os 10000000. Som et resultat kan vi udtrække værdien af ​​hver parameter:

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

I denne vejledning har vi diskuteret, hvordan & 0xff operation deler effektivt en variabel på en måde, der kun efterlader værdien i de sidste 8 bit og ignorerer resten af ​​bitene. Som vi har set, er denne operation særlig nyttig, når vi skifter en variabel til højre og har brug for at udtrække de forskudte bits.

Som altid er koden præsenteret i denne artikel tilgængelig på GitHub.