java - 为什么不能在 kotlin 方法 intArrayOf 中使用十六进制 Int?

标签 java kotlin int

我在 Kotlin 中发现了一个奇怪的问题。

我可以将十六进制整数分配给 Int 变量,就像:

private val a = 0xFFFF0000    //works good

但我无法在 intArrayOf 中使用这个十六进制整数:

private val array: IntArray = intArrayOf(0xFFFF0000)

IDE 提示:整数文字不符合预期的 Int 类型enter image description here

有人知道为什么吗?无论如何可以在 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)

关于java - 为什么不能在 kotlin 方法 intArrayOf 中使用十六进制 Int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58811970/

相关文章:

Kotlin:如何从范围返回一些值?

Android Kotlin 将微调器值传递给可变列表

c - 在 C 中打印一个 int

java - 相当于 string.isempty 的 Int

java - Java 中的转换问题

java - Spring Boot中@RequestMapping和Locale有什么关系?

java - 使用注释的 Hibernate ID 生成器 "increment"

IntelliJ 2017.1-C 中缺少 Java 调试接口(interface) (com.sun.jdi) 包

java - 找不到契约(Contract)附件

java - 如何在 Kotlin Gradle 脚本中导入 java 模块