5

Clojure 的位移操作似乎都返回 64 位long结果,即使对于 32 位int参数也是如此。这不是一个实质性问题bit-shift-left

user=> (format "%08x" (unchecked-int (bit-shift-left (unchecked-int 0x12345678) 4)))
"23456780"
user=> (format "%08x" (unchecked-int (bit-shift-left (unchecked-int 0xf2345678) 4)))
"23456780"

但是,这成为负数无符号右移的问题:

user=> (format "%08x" (unchecked-int (unsigned-bit-shift-right (unchecked-int 0xf2345678) 4)))
"ff234567"

正确的答案当然是0f234567

在 Clojure 中实现 32 位无符号右移的最有效方法是什么?

4

1 回答 1

5
于 2016-01-21T04:02:44.320 回答