В Kotlin, почему (-1 ushr 4) отличается от -1.ushr (4)? - PullRequest
4 голосов
/ 28 июня 2019

В Kotlin REPL и Kotlin / JVM:

  • -1 ushr 4 оценивается как 268435455
  • -1.ushr(4) оценивается как 0

Первый верен, так как -1 равно 0xFFFFFFFF, поэтому 0x0FFFFFFF равно 268435455, но что отличает второе?

1 Ответ

7 голосов
/ 28 июня 2019

Это зависит от приоритета оператора. В первом случае операция разрешается как (-1) ushr 4, а во втором случае - -(1 ushr 4).

.

Это происходит потому, что (цитируя документацию ):

Вызовы инфиксных функций имеют более низкий приоритет, чем арифметические операторы, приведение типов и оператор rangeTo. Следующие выражения эквивалентны:

1 shl 2 + 3 и 1 shl (2 + 3)

Хотя вызов метода имеет более высокий приоритет, чем -.

...