Hex 和 Int 按位运算冲突

Hex and Int bitwise operation confict

为什么在 Kotlin 中无法使用 4 字节十六进制和 Int 进行按位运算?

同时Java

没有问题

据我所知,在 JVM 中 int 占用 4 个字节。

// Kotlin
val num = 0
val n = 0xff000000 or num    // <-- 'num' ERROR
// Java
int num = 0;
int n = 0xff000000 | num;    // <-- 'num' OK

0xFF000000 是 Long,不是 Int。它超出了 Int 范围,因为它使用 32 位来表示正数,但 Int 仅使用 31 位表示数字,一位表示符号。任何第一个数字大于 7 的 six-digit 十六进制数都需要 32 位来表示数字,因此它被解释为 Long。

Kotlin 不会像 Java 那样进行隐式数字转换,因为它们很容易导致难以理解的错误。您必须手动将其转换为 Int。

val num = 0
val n = 0xff000000.toInt() or num