Grundlegendes zum & 0xff-Wert in Java

1. Übersicht

0xff ist eine Zahl, die im hexadezimalen Zahlensystem (Basis 16) dargestellt wird. Es besteht aus zwei F- Zahlen in hex. Wie wir wissen, entspricht F in hex 1111 im binären Zahlensystem. Also, 0xff in binär ist 11111111.

In diesem Artikel erfahren Sie, wie Sie den Wert 0xff verwenden. Außerdem erfahren Sie, wie Sie es mit mehreren Datentypen darstellen und wie Sie es mit dem Operator & verwenden . Abschließend werden einige der mit der Verwendung verbundenen Vorteile erläutert.

2. Darstellung von 0xff mit verschiedenen Datentypen

Mit Java können wir Zahlen definieren, die als hexadezimal interpretiert werden (Basis 16), indem wir das Präfix 0x gefolgt von einem ganzzahligen Literal verwenden.

Der Wert 0xff entspricht 255 in vorzeichenloser Dezimalzahl, -127 in vorzeichenbehafteter Dezimalzahl und 11111111 in binär.

Wenn wir also eine Definition int Variable mit einem Wert von 0xff , da Java Integer - Zahlen repräsentiert 32 Bits verwendet , der Wert von 0xff 255 :

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

Wenn wir jedoch eine Definition Byte Variable mit dem Wert 0xff , da Java einen Byte mit 8 Bit repräsentiert und da ein Byte ein signiertes Datentyp ist , der Wert von 0xff -1 :

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

Wie wir sehen, wenn wir einen definieren Byte Variable mit dem 0xff Wert, müssen wir niedergeschlagenen es zu einem Byte , da der Bereich des Byte - Typ - Daten ist von -128 bis 127 .

3. Allgemeine Verwendung von & 0xff Operation

Der Operator & führt eine bitweise UND-Verknüpfung aus . Die Ausgabe von bitweisem UND ist 1, wenn die entsprechenden Bits von zwei Operanden 1 sind. Wenn andererseits eines der Bits der Operanden 0 ist, wird das Ergebnis des entsprechenden Bits mit 0 ausgewertet.

Da 0xff in den letzten 8 Bits acht Einsen enthält , ist es ein Identitätselement für die bitweise UND-Verknüpfung . Wenn wir also die x & 0xff- Operation anwenden , erhalten wir die niedrigsten 8 Bits von x . Beachten Sie, dass die Zahl x , wenn sie kleiner als 255 ist, immer noch dieselbe ist. Andernfalls sind es die niedrigsten 8 Bits von x .

Im Allgemeinen bietet uns die & 0xff- Operation eine einfache Möglichkeit, die niedrigsten 8 Bits aus einer Zahl zu extrahieren . Wir können es tatsächlich verwenden, um alle 8 Bits zu extrahieren, die wir benötigen, da wir jedes der 8 Bits, die wir die niedrigsten Bits sein möchten, nach rechts verschieben können. Dann können wir sie extrahieren, indem wir die Operation & 0xff anwenden .

Sehen wir uns ein Beispiel an, um einige der Vorteile der Verwendung von & 0xff genauer zu erläutern.

4. Extrahieren von RGBA- Farbkoordinaten mit & 0xff

Nehmen wir an, wir haben eine Ganzzahl x , die in 32 Bit gespeichert ist und eine Farbe im RGBA-System darstellt, was bedeutet, dass sie 8 Bit für jeden Parameter (R, G, B und A) hat:

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

Also, x binär würde als 00010000 00111001 10101000 00000111 dargestellt werden - was das Äquivalent zu 272214023 in dezimal ist.

Jetzt haben wir unseren x- Wert in Dezimalzahl und möchten den Wert für jeden Parameter extrahieren.

Wie wir wissen, verschiebt die >> Operation die Bits nach rechts. Wenn wir dies tun (10000000 00000000 >> 8), erhalten wir 10000000. Als Ergebnis können wir den Wert jedes Parameters extrahieren :

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

In diesem Tutorial haben wir erläutert, wie die & 0xff- Operation eine Variable effektiv so unterteilt, dass nur der Wert in den letzten 8 Bits übrig bleibt und der Rest der Bits ignoriert wird. Wie wir gesehen haben, ist diese Operation besonders hilfreich, wenn wir eine Variable nach rechts verschieben und die verschobenen Bits extrahieren müssen.

Wie immer ist der in diesem Artikel vorgestellte Code auf GitHub verfügbar.