Heim >Java >javaLernprogramm >Warum führt die Umwandlung eines „int' in ein „byte' in Java zu einem unerwartet negativen Ergebnis?
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);
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!