【发布时间】:2016-11-17 19:32:55
【问题描述】:
我需要执行与 JavaScript 完全相同的左移操作。问题在于:
a << 16
只有当
// JS
32767 << 16 // 2147418112
32768 << 16 // -2147483648
567890 << 16 // -1437466624
;; CLJ
(bit-shift-left 32767 16) // 2147418112
(bit-shift-left 32768 16) // 2147483648
(bit-shift-left 567890 16) // 37217239040
我注意到,在执行“37431
// CLJ, then JS
10 01001 00011 01110 00000 00000 00000
1 10110 11100 10010 00000 00000 00000
我注意到这是二进制补码,并且我注意到 JS 可能会这样做,因为它不能(出于某种原因)为此使用超过 32 位(可能所有位级操作都在 32 位上完成?),所以我想知道如果数字高于 32767,我是否应该对数字应用二进制补码。但话说回来,我是 Clojure 新手,所以我不太确定如何做到这一点。
【问题讨论】:
标签: javascript clojure bit-manipulation