在Kotlin中,为什么(-1 ushr 4)与-1.ushr(4)不同?

时间:2019-06-28 13:29:43

标签: kotlin bitwise-operators infix-operator

在Kotlin REPL和Kotlin / JVM中:

  • -1 ushr 4的值为268435455
  • -1.ushr(4)的值为0

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

1 个答案:

答案 0 :(得分:7)

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

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

  

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

     

1 shl 2 + 31 shl (2 + 3)

方法调用的优先级高于-