escriba un literal integer hexadecimal igual a Int.MIN_VALUE en Kotlin

¿cómo se escribe un literal integer hexadecimal que sea igual a Int.MIN_VALUE (que es -2147483648 en decimal) en Kotlin?

AFAIK, un Int es de 4 bytes … y a veces parece que el complemento de 2 se usa para representar integers … pero no estoy seguro. He intentado los siguientes literales hexadecimales para ayudarme a comprender el sistema:

  • 0xFFFFFFFF pero este es un Long , no un Int
  • 0xFFFFFFFF.toInt() que es -1
  • -0xFFFFFFFF.toInt() que es 1
  • 0x7FFFFFFF que es 2147483647 que es Int.MAX_VALUE
  • -0x7FFFFFFF que es -2147483647 que es Int.MIN_VALUE+1
  • 0xFFFFFFF que es 268435455 en decimal
  • 0x0FFFFFFF que también es 268435455 en decimal

Pero no puedo entender qué hexadecimal integer literal se puede usar para representar Int.MIN_VALUE .

Espero que la respuesta no me haga sentir estúpido …

Int representa un integer con signo de 32 bits. 32 bits significa 8 dígitos hexadecimales:

___7 FFFFFFF

0111 1111 1111 1111 1111 1111 1111 1111

Como puede ver, el bit más a la izquierda es 0, por lo tanto, esta es una integral positiva en una representación de 32 bits. Por definición de complemento de 2 y ejemplo, el valor negativo mínimo de 32 bits tendrá 1 en el bit más a la izquierda seguido de 0 :

1000 0000 0000 0000 0000 0000 0000 0000

___8 0 0 0 0 0 0 0

eso es 0x80000000 .

En Kotlin, debe anteponer el signo - para denotar Int negativo que no es verdadero en Java. Considera seguir el ejemplo

 println(0x7FFFFFFF) // -> prints 2147483647 (Integer.MAX_VALUE) println(-0x80000000) // -> prints -2147483648 (Integer.MIN_VALUE) println(0x80000000) // -> prints 2147483648 (does not fit into Int) 

No es lo mismo que en 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) 

Esto está en línea con las especificaciones de Kotlin, aunque el comportamiento de desbordamiento de los literales hexadecimales aún no se ha definido .

Otras lecturas:

  • ¿Por qué Java puede almacenar 0xff000000 como int?
  • Forma correcta de inyectar Dagger 2 + Kotlin + ViewModel
  • De Java a Kotlin
  • Constructor de sobrecarga nulo
  • ¿Alguna diferencia entre "Subject.asObservable ()" y el tema en sí "Subject"?
  • Kotlin-allopen para android
  • La cookie de session no persiste con JSoup
  • Cómo almacenar BigDecimal en Firebase?
  • Cómo agregar funcionalidad +/- a un butting en Android kotlin
  • SupportfragmentManager se convierte en null android kotlin
  • Analizando un object json con un campo dynamic en Kotlin
  • Kotlin NDArray con un constructor lambda con tipo de retorno genérico