在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

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

One Solution collect form web for “在Kotlin中写入一个等于Int.MIN_VALUE的hex整数字面值”

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?
  • 从控制台循环字符串和总和奇数
  • 如何在实现Java接口时克服“相同的JVM签名”错误?
  • 如何在Kotlin中读取环境variables?
  • Kotlin:以函数的forms传递对象作为参考,并改变它的实例
  • Kotlin和Gradle没有Maven中央?
  • 如何在Kotlin中运行编译后的类文件?
  • Kotlin的尺寸从6变为2?
  • Kotlin:通过转换修改(不可变的)列表,这是否合法?
  • 在Kotlin中渲染json响应
  • Kotlin的挥发性?
  • kotlin-android null不能转换为非nulltypeskotlin.String
  • Kotlin language will be the best programming language for Android.