十六进制和Int位操作冲突



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

最新更新