Heim  >  Artikel  >  Java  >  Warum erzeugt „value & 0xff“ in Java einen vorzeichenlosen Wert, obwohl „value“ ein vorzeichenbehaftetes Byte ist?

Warum erzeugt „value & 0xff“ in Java einen vorzeichenlosen Wert, obwohl „value“ ein vorzeichenbehaftetes Byte ist?

DDD
DDDOriginal
2024-11-02 02:45:02521Durchsuche

Why does `value & 0xff` produce an unsigned value in Java, even though `value` is a signed byte?

Bitweise Manipulation mit Wert & 0xff in Java

In diesem Java-Codeausschnitt:

<code class="java">byte value = 0xfe; // corresponds to -2 (signed) and 254 (unsigned)
int result = value & 0xff;</code>

stellt sich die Frage : Warum erzeugt die bitweise UND-Verknüpfung (&) zwischen Wert und 0xff das Ergebnis 254 (ohne Vorzeichen) statt -2 (mit Vorzeichen) wie erwartet?

Im Gegensatz zu C ist Byte in Java ein vorzeichenbehafteter Typ. Das Zuweisen eines Werts zu int ohne bitweise Manipulation würde zum vorzeichenbehafteten Wert -2 führen. Durch die Verwendung von & mit 0xff wird jedoch der beabsichtigte vorzeichenlose Wert erreicht.

Der Schlüssel hier ist, dass & mit int-Werten arbeitet. Wenn ein Wert (ein Byte) mit & verwendet wird, wird er zunächst zu einem int heraufgestuft. Ebenso ist 0xff ein int-Literal. Die &-Operation ergibt dann den 8-Bit-Binärwert aus dem Wert, der in den niedrigstwertigen 8 Bits des Ergebnisses platziert ist.

In diesem Beispiel:

  • Wert wird auf -2 (11111110) hochgestuft im Binärformat)
  • 0xff stellt 255 dar (11111111 im Binärformat)
  • Wert & 0xff ergibt somit 254 (11111110 im Binärformat)

Diese bitweise Manipulation wird häufig verwendet um bestimmte Bits zu extrahieren oder die vorzeichenlose Natur eines Werts beizubehalten, insbesondere in Low-Level-Programmier- oder Datenmanipulationsszenarien.

Das obige ist der detaillierte Inhalt vonWarum erzeugt „value & 0xff“ in Java einen vorzeichenlosen Wert, obwohl „value“ ein vorzeichenbehaftetes Byte ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn