为什么在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位来表示数字,使用1位来表示符号。任何第一个数字大于7的六位十六进制数都需要32位来代表数字,因此它被解释为Long。
Kotlin不像Java那样做隐式数字转换,因为它们很容易导致晦涩的错误。您必须手动将其转换为Int.
val num = 0
val n = 0xff000000.toInt() or num