Heim > Java > javaLernprogramm > Warum führt die Int-zu-Byte-Konvertierung von Java zu einem negativen Wert?

Warum führt die Int-zu-Byte-Konvertierung von Java zu einem negativen Wert?

Linda Hamilton
Freigeben: 2024-11-08 13:35:02
Original
243 Leute haben es durchsucht

Why Does Java's Int-to-Byte Conversion Result in a Negative Value?

Unerwartetes Verhalten bei der Java-Int-zu-Byte-Konvertierung

Beim Konvertieren einer Ganzzahl (int) in ein Byte (byte) in Java, Es kann zu unerwarteten Ergebnissen kommen. Betrachten Sie den folgenden Code:

int i = 132;

byte b = (byte) i;
System.out.println(b);
Nach dem Login kopieren

Überraschenderweise ist die Ausgabe nicht 132, sondern -124. Um zu verstehen, warum, müssen wir uns mit der internen Darstellung primitiver Typen in Java befassen.

Vorzeichenbehaftete Zahlen und Zweierkomplement

Ints sind in Java 32-Bit-vorzeichenbehaftet Ganzzahlen, während Bytes 8-Bit-Ganzzahlen mit Vorzeichen sind. Eine ganze Zahl mit Vorzeichen kann sowohl positive als auch negative Werte in der Zweierkomplement-Notation darstellen. In dieser Notation bestimmt das Bit ganz links (MSB) das Vorzeichen der Zahl, wobei 0 positiv und 1 negativ angibt.

Konvertierung von Int in Byte

Wann Bei der Konvertierung von int in byte behält Java das Vorzeichenbit bei und verwirft die restlichen 24 Bits. Das heißt, wenn der int-Wert positiv war, ist auch der resultierende Bytewert positiv. Wenn der int-Wert jedoch negativ war, wie in unserem Beispiel, erscheint der resultierende Bytewert negativ.

Die Zweierkomplementumkehr

Um dieses negative Verhalten zu verstehen, Wir müssen den Zweierkomplement-Inversionsprozess berücksichtigen. Um eine negative Zahl darzustellen, invertiert das Zweierkomplement alle Bits und addiert 1 zum Ergebnis. In unserem Fall ist der int-Wert 132 binär 10000100. Durch Invertieren der Bits und Addieren von 1 erhalten wir 01111011, was in Dezimalschreibweise -124 ist.

Bytewerte ohne Vorzeichen

In unserem Beispiel erwarten wir normalerweise, dass der Bytewert so ist ohne Vorzeichen sein, was uns einen positiven Wert von 132 anstelle von -124 geben würde. Um den vorzeichenlosen Wert aus dem Byte zu erhalten, können wir eine Bitmaske anwenden, die das Vorzeichenbit entfernt und nur die unteren 8 Bits extrahiert.

byte signedByte = -124;
int unsignedByte = signedByte & 0xff;

System.out.println("Signed: " + signedByte + " Unsigned: " + unsignedByte);
Nach dem Login kopieren

Dadurch wird „Signed: -124 Unsigned: 132“ ausgegeben uns den gewünschten vorzeichenlosen Wert.

Das obige ist der detaillierte Inhalt vonWarum führt die Int-zu-Byte-Konvertierung von Java zu einem negativen Wert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage