Den seltsamen Fall von „value & 0xff“ in Java verstehen
In Java führt der häufig verwendete bitweise UND-Operator „&“ eine aus Bitweise Operation an zwei ganzen Zahlen, was zu einem ganzzahligen Wert führt. Wenn es jedoch auf ein Byte angewendet wird, wie in der Abfrage „Wert & 0xff“, liefert es ein ganzzahliges Ergebnis, was viele verwirrt.
Um dieses Rätsel zu lösen, werfen wir einen Blick auf die Grundlagen des Byte-Datentyps von Java. Im Gegensatz zu anderen numerischen Typen ist Byte vorzeichenbehaftet, was bedeutet, dass es sowohl positive als auch negative Zahlen darstellen kann. Diese Unterscheidung ist entscheidend, wenn bitweise Operationen ausgeführt werden.
Im angegebenen Code wandelt „Wert & 0xff“ im Wesentlichen das vorzeichenbehaftete Byte „Wert“ in ein vorzeichenloses ganzzahliges „Ergebnis“ um, indem eine bitweise UND-Operation mit dem hexadezimalen Literal angewendet wird 0xff (255). Dieser Vorgang stellt sicher, dass nur die niedrigsten 8 Bits von „Wert“ im „Ergebnis“ erhalten bleiben, wodurch jegliche Erweiterung mit negativem Vorzeichen effektiv entfernt wird.
Die Notwendigkeit einer solchen Transformation ergibt sich aus der Tatsache, dass „Wert“ ein Vorzeichen ist Byte, während der „&“-Operator ganzzahlige Operanden erfordert. Das Byte „value“ wird während des Vorgangs automatisch zu einem int heraufgestuft, was zu einer 32-Bit-Ganzzahl mit Vorzeichen führt. Folglich wird die Operation „&“ für die heraufgestuften int-Werte ausgeführt und das Ergebnis wird zurück in ein int konvertiert, wobei die 8 niedrigstwertigen Bits des ursprünglichen Bytes erhalten bleiben.
Zur Veranschaulichung, wenn „value“ vorhanden wäre eine binäre Darstellung von 11111110 (die -2 als vorzeichenbehaftetes Byte darstellt), würde die Operation „value & 0xff“ 11111110 (ohne Vorzeichen) als Ergebnis erzeugen. Dies liegt daran, dass das hexadezimale Literal 0xff eine binäre Darstellung von 11111111 hat und das bitweise UND dieser beiden Werte effektiv alle Bits außer den 8 niedrigstwertigen Bits auf 0 setzt.
Das obige ist der detaillierte Inhalt vonWarum konvertiert „Wert & 0xff“ ein Java-Byte in eine vorzeichenlose Ganzzahl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!