Wie schreibt man ein Hexadezimal-Integer-Literal, das gleich Int.MIN_VALUE
ist (was -2147483648
in Dezimal ist) in Kotlin?
AFAIK, ein Int ist 4 Bytes ... und manchmal scheint es, dass Zweierkomplement verwendet wird, um darzustellen ganze Zahlen ... aber ich bin mir nicht sicher. Ich habe die folgenden Hex-Literale ausprobiert, um mir zu helfen, das System zu verstehen:
0xFFFFFFFF
, aber das ist ein Long
, kein Int
0xFFFFFFFF.toInt()
, was -1 -0xFFFFFFFF.toInt()
ist 1 0x7FFFFFFF
was 2147483647 ist das ist Int.MAX_VALUE
-0x7FFFFFFF
was -2147483647 ist das ist Int.MIN_VALUE+1
0xFFFFFFF
, das ist 268435455 in Dezimal 0x0FFFFFFF
, das ist auch 268435455 in Dezimal Aber ich kann nicht herausfinden, welches hexadezimale Integer-Literal verwendet werden kann, um Int.MIN_VALUE
darzustellen.
Ich hoffe, die Antwort macht mich nicht dumm ...
Int
steht für eine 32-Bit-Ganzzahl mit Vorzeichen. 32 Bits bedeuten 8 Hexadezimalziffern:
___7 F F F F F F F
0111 1111 1111 1111 1111 1111 1111 1111
Wie Sie sehen können, ist das am weitesten links liegende Bit 0, also ist dies ein positives Integral in einer 32-Bit-Darstellung. Nach 2er-Komplement Definition und Beispiel wird der minimale 32-Bit-negative Wert 1
am weitesten links gefolgt von 0
:
1000 0000 0000 0000 0000 0000 0000 0000
___8 0 0 0 0 0 0 0
das ist 0x80000000
.
In Kotlin muss das -
-Zeichen vorangestellt werden, um negativ Int
zu bezeichnen, was in Java nicht zutrifft. Betrachten Sie folgendes Beispiel
Es ist nicht dasselbe wie in Java:
%Vor%Dies steht im Einklang mit Kotlin spec obwohl die Das Überlaufverhalten von hexadezimalen Literalen muss noch definiert werden .
Weiterführende Literatur: