2024 Clojure 状态调查!中分享您的想法。

欢迎!有关该系统的工作信息,请参阅关于页面获取更多信息。

0
Java 兼容

(bit-shift-left 0xfffffff0 4) 返回 0xffffff0f,而我期待它返回 0xffffff00。类似地,(bit-shift-left 0xfffffff0 8) 返回 0xfffff0ff 等。

我查看了实现,bit-shift-left 将其所有参数强制转换为 Long,然后调用 Java 的 << 操作符,该操作符应该丢弃高位而不是旋转它们。

1 答案

+2

被选中
 
最佳答案

可能在 bit-shift-left 和输出之间出了一些问题。这看起来对吗?

user> (format "%x" (bit-shift-left 0xfffffff0 4))
"fffffff00"
好吧,我使用了 "%h" 作为格式字符串,以为 "h" 代表 "hex"。结果发现 "%h" 实际上是调用 Java 的 hashCode() 方法将值转换为十六进制。那真是太愚蠢了。
...