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
为什么在 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