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

标签 kotlin bitwise-operators infix-operator

在 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 and 1 shl (2 + 3)



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

    关于kotlin - 在 Kotlin 中,为什么 (-1 ushr 4) 与 -1.ushr(4) 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56807862/

    相关文章:

    swift - 如何使用 ** 用于指数使用 @infix func **( )?

    android - Android Studio 中Kotlin "also"函数异常警告

    arrays - Kotlin - 如何将字符串转换为字节数组

    c++ - 为什么移动超过允许的位仍然有效?

    检查 MPI 中的进程数是否为 2 的幂

    haskell - 在 Haskell 中定义自定义运算符的关联性

    Kotlin:带有 TypeReference<HashMap<String, String>> 的 objectmapper.readValue() 无法推断参数

    lambda - LMAX 干扰器与 Kotlin : Can't use lambda?

    javascript - 为什么在 JavaScript 中用 0 进行位移位在某些情况下会产生奇怪的结果

    c# - C# 中的 F# 中缀运算符?