在Kotlin中写入一个等于Int.MIN_VALUE的hex整数字面值

如何在Kotlin中写入一个等于Int.MIN_VALUE (十进制数为-2147483648 )的hex整数文字?

AFAIK,一个Int是4个字节…有时好像2的补码用来表示整数…但我不确定。 我已经尝试了下面的hex文字来帮助我自己理解系统:

  • 0xFFFFFFFF但这是一个Long ,而不是一个Int
  • 0xFFFFFFFF.toInt()这是-1
  • -0xFFFFFFFF.toInt()这是1
  • 0x7FFFFFFF这是2147483647这是Int.MAX_VALUE
  • -0x7FFFFFFF这是-2147483647这是Int.MIN_VALUE+1
  • 0xFFFFFFF ,十进制是268435455
  • 0x0FFFFFFF也是十进制的268435455

但我不知道什么hex整数文字可以用来表示Int.MIN_VALUE

我希望答案不会让我感到愚蠢

    Int代表一个32位有符号整数。 32位表示8位hex数字:

    ___7 FFFFFFF

    0111 1111 1111 1111 1111 1111 1111 1111

    正如你所看到的,最左边的位是0,因此这是32位表示中的一个正整数。 通过2的补码定义和例子,最小的32位负值将在最左边的位处有1 ,然后是0

    1000 0000 0000 0000 0000 0000 0000 0000

    ___8 0 0 0 0 0 0 0

    那就是0x80000000

    在Kotlin中,您需要预先加上-符号来表示负的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) 

    这符合Kotlin规范,尽管hex文字的溢出行为尚未定义 。

    进一步阅读:

    • 为什么Java能够将0xff000000存储为int?