напишите шестнадцатеричный целочисленный литерал, равный Int.Минимальное значение в Котлин
как написать шестнадцатеричный целочисленный литерал, равный Int.MIN_VALUE
(т. е. -2147483648
in decimal) в Котлине?
AFAIK, Int составляет 4 байта...и иногда кажется дополнение 2 используется для представления целых чисел...но я не уверен. Я пробовал следующие шестнадцатеричные литералы, чтобы помочь себе понять систему:
-
0xFFFFFFFF
но этоLong
, а неInt
-
0xFFFFFFFF.toInt()
что -1 -
-0xFFFFFFFF.toInt()
что 1 -
0x7FFFFFFF
который является 2147483647, которыйInt.MAX_VALUE
-
-0x7FFFFFFF
который -2147483647 которыйInt.MIN_VALUE+1
-
0xFFFFFFF
что 268435455 в десятичном -
0x0FFFFFFF
который также 268435455 в десятичном
но я не могу понять, какой шестнадцатеричный целочисленный литерал можно использовать для представления Int.MIN_VALUE
.
надеюсь, ответ не заставит меня чувствовать себя глупо...
1 ответов
Int
представляет 32-разрядное целое число со знаком. 32 бита означает 8 шестнадцатеричных цифр:
___7 F F F F F F F
0111 1111 1111 1111 1111 1111 1111 1111
как вы можете видеть самый левый бит равен 0, следовательно, это положительный Интеграл в 32-битном представлении. By 2-х!--14--> определение и пример минимальное 32-разрядное отрицательное значение будет иметь 1
в левом бит последующим 0
:
1000 0000 0000 0000 0000 0000 0000 0000
___8 0 0 0 0 0 0 0
что это 0x80000000
.
в Котлине вам нужно добавить-
знак для обозначения отрицательных Int
что неверно в Java. Рассмотрим следующий пример
println(0x7FFFFFFF) // -> prints 2147483647 (Integer.MAX_VALUE)
println(-0x80000000) // -> prints -2147483648 (Integer.MIN_VALUE)
println(0x80000000) // -> prints 2147483648 (does not fit into Int)
это не то же самое, что в Java:
System.out.println(0x7FFFFFFF); // -> prints 2147483647 (Integer.MAX_VALUE)
System.out.println(-0x80000000); // -> prints -2147483648 (Integer.MIN_VALUE)
System.out.println(0x80000000); // -> prints -2147483648 (Integer.MIN_VALUE)
это соответствует Котлин спецификаций хотя поведение переполнения шестнадцатеричные литералы еще предстоит определено.
читайте далее: