在 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)
虽然方法调用的优先级高于
-
。
关于kotlin - 在 Kotlin 中,为什么 (-1 ushr 4) 与 -1.ushr(4) 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56807862/