在 Kotlin 中,为什么 (-1 ushr 4) 不同于 -1.ushr(4)?
In Kotlin, why is (-1 ushr 4) different from -1.ushr(4)?
在 Kotlin REPL 和 Kotlin/JVM 中:
-1 ushr 4
的计算结果为 268435455
-1.ushr(4)
的计算结果为 0
第一个是正确的,因为-1是0xFFFFFFFF,所以0x0FFFFFFF是268435455,但是第二个有什么不同呢?
这取决于运营商的优先级。在第一种情况下,操作被解析为 (-1) ushr 4
,而在第二种情况下,它是 -(1 ushr 4)
.
发生这种情况是因为(引用 documentation):
Infix function calls have lower precedence than the arithmetic operators, type casts, and the rangeTo operator. The following expressions are equivalent:
1 shl 2 + 3
and 1 shl (2 + 3)
虽然方法调用的优先级高于-
。
在 Kotlin REPL 和 Kotlin/JVM 中:
-1 ushr 4
的计算结果为268435455
-1.ushr(4)
的计算结果为0
第一个是正确的,因为-1是0xFFFFFFFF,所以0x0FFFFFFF是268435455,但是第二个有什么不同呢?
这取决于运营商的优先级。在第一种情况下,操作被解析为 (-1) ushr 4
,而在第二种情况下,它是 -(1 ushr 4)
.
发生这种情况是因为(引用 documentation):
Infix function calls have lower precedence than the arithmetic operators, type casts, and the rangeTo operator. The following expressions are equivalent:
1 shl 2 + 3
and1 shl (2 + 3)
虽然方法调用的优先级高于-
。