schreibe ein hexadezimales Integer-Literal gleich Int.MIN_VALUE in Kotlin

8

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
  • ist
  • -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 ...

    
Eric 04.07.2016, 01:22
quelle

1 Antwort

9

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

%Vor%

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:

miensol 04.07.2016, 06:06
quelle

Tags und Links