Heim > Java > javaLernprogramm > Warum führt die Umwandlung eines „int' in ein „byte' in Java zu einem unerwartet negativen Ergebnis?

Warum führt die Umwandlung eines „int' in ein „byte' in Java zu einem unerwartet negativen Ergebnis?

DDD
Freigeben: 2024-11-15 08:42:02
Original
1027 Leute haben es durchsucht

Why does casting an `int` to a `byte` in Java lead to an unexpected negative result?

Unerwartetes Verhalten: Java-Byte-Konvertierungsabfrage

Wenn in Java ein int in ein Byte konvertiert wird, ist das unerwartete Ergebnis -124 von Der folgende Codeausschnitt hat für Aufsehen gesorgt:

int i = 132;

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

Eintauchen in das Rätsel

Um dieses Rätsel zu lösen, müssen wir in die Feinheiten primitiver Datentypen in Java eintauchen . Ints mit 32 Bit und Bytes mit 8 Bit unterscheiden sich in ihrer Speicherkapazität. Die meisten primitiven Typen, einschließlich Bytes, sind vorzeichenbehaftet, was bedeutet, dass sie sowohl positive als auch negative Werte mithilfe der Zweierkomplement-Codierung darstellen.

Vorzeichenbitdominanz

Im Zweierkomplement am häufigsten Das signifikante Bit (MSB) bestimmt das Vorzeichen. Beim Konvertieren eines Bytes in ein Int wird das MSB in allen neuen MSBs repliziert. Daher wird aus einem 8-Bit-Byte 255 (11111111) ein 32-Bit-Int 111111111111111111111111101010101.

Negative Value Deception

Bei der Interpretation negativer Zweierkomplementzahlen muss das erste MSB gefunden werden von links nach rechts und Invertieren aller nachfolgenden Bits. Für unsere int-Darstellung von 255 oben ergibt dies 0000000000000000000000001111111 = -1. Dies erklärt, warum Java -124 anzeigt, den vorzeichenbehafteten Wert von 132.

Enthüllung der vorzeichenlosen Wahrheit

Um den vorzeichenlosen Wert eines Bytes aufzudecken, verwenden wir eine Bitmaske ( 0xff), der die niedrigstwertigen 8 Bits isoliert und die überflüssigen Vorzeichenbits entfernt. Die Anwendung dieser Maskierungsoperation auf das Byte „signedByte = -1“ ergibt den vorzeichenlosen Wert „unsignedByte = 255“.

Bitwise Magic

Bitweise UND maskiert die unnötigen Vorzeichenbits. Wenn ein int in ein Byte umgewandelt wird, verwirft Java die oberen 24 Bits. Die Maskierung stellt sicher, dass die verbleibenden 8 Bits von Java als positiver Wert interpretiert werden, da das Vorzeichenbit jetzt 0 ist.

Entlarvung der Intrige des Bytes

Dieses Verhalten wird hervorgehoben die entscheidende Unterscheidung zwischen vorzeichenbehafteten und vorzeichenlosen Darstellungen von Zahlen und die Operationen auf Bitebene, die bei Datentypkonvertierungen eine Rolle spielen. Durch das Verständnis dieser Prinzipien können wir das Rätsel der Bytekonvertierungen in Java entschlüsseln und unerwartete Ergebnisse vermeiden.

Das obige ist der detaillierte Inhalt vonWarum führt die Umwandlung eines „int' in ein „byte' in Java zu einem unerwartet negativen Ergebnis?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage