напишите шестнадцатеричный целочисленный литерал, равный 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)

это соответствует Котлин спецификаций хотя поведение переполнения шестнадцатеричные литералы еще предстоит определено.

читайте далее: