我在 Kotlin 中发现了一个奇怪的问题。
我可以将十六进制整数分配给 Int 变量,就像:
private val a = 0xFFFF0000 //works good
但我无法在 intArrayOf
中使用这个十六进制整数:
private val array: IntArray = intArrayOf(0xFFFF0000)
IDE 提示:整数文字不符合预期的 Int 类型。
有人知道为什么吗?无论如何可以在 intArrayof
中使用 0xFFFF0000
吗?
虽然0x7FFF_FFFF
的类型为Int,但从0x8000_0000
开始的十六进制文字的类型为Long。
您需要 32 位来存储 0x8000_0000
。虽然 Int 有符号,但该值(即最小的一个)太大而无法存储在 Int 中。
您可以使用负十六进制文字
val a: IntArray = intArrayOf(-0x1_0000)
如果您使用的是 JVM,您可以检查
a.forEach { println(Integer.toHexString(it)) }
assert(0x7FFF_FFFF == Integer.MAX_VALUE)
assert(-0x8000_0000 == Integer.MIN_VALUE)