2024 Clojure 调查中分享你的看法!

欢迎!请查看关于页面以获取更多信息。

0
Java 互操作

(bit-shift-left 0xfffffff0 4) 返回 0xffffff0f,而我期望它是 0xffffff00。同样,(bit-shift-left 0xfffffff0 8) 返回 0xfffff0ff,等等。

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

1 个回答

+2

被选中
 
最佳答案

可能在“位移左操作”和输出之间出了点问题。这看起来对吗?

user> (format "%x" (bit-shift-left 0xfffffff0 4))
"fffffff00"
好的,我使用"%h"作为格式字符串,想着"h"意味着“十六进制”。结果证明,"%h"是在Java中调用hashCode()将值转换为十六进制的。那太愚蠢了。
...