5

在 Kotlin REPL 和 Kotlin/JVM 中:

  • -1 ushr 4评估为268435455
  • -1.ushr(4)评估为0

第一个是正确的,因为 -1 是 0xFFFFFFFF,所以 0x0FFFFFFF 是 268435455,但是是什么让第二个不同?

4

1 回答 1

6

这取决于操作员的优先级。在第一种情况下,操作被解析为(-1) ushr 4,而在第二种情况下,它是-(1 ushr 4).

发生这种情况是因为(引用文档):

中缀函数调用的优先级低于算术运算符、类型转换和 rangeTo 运算符。以下表达式是等价的:

1 shl 2 + 31 shl (2 + 3)

虽然方法调用的优先级高于-.

于 2019-06-28T13:36:07.093 回答