在 Kotlin REPL 和 Kotlin/JVM 中:
-1 ushr 4
评估为268435455
-1.ushr(4)
评估为0
第一个是正确的,因为 -1 是 0xFFFFFFFF,所以 0x0FFFFFFF 是 268435455,但是是什么让第二个不同?
在 Kotlin REPL 和 Kotlin/JVM 中:
-1 ushr 4
评估为268435455
-1.ushr(4)
评估为0
第一个是正确的,因为 -1 是 0xFFFFFFFF,所以 0x0FFFFFFF 是 268435455,但是是什么让第二个不同?
这取决于操作员的优先级。在第一种情况下,操作被解析为(-1) ushr 4
,而在第二种情况下,它是-(1 ushr 4)
.
发生这种情况是因为(引用文档):
中缀函数调用的优先级低于算术运算符、类型转换和 rangeTo 运算符。以下表达式是等价的:
1 shl 2 + 3
和1 shl (2 + 3)
虽然方法调用的优先级高于-
.