如何快速在 Int 和 Word 之间进行位转换?

How can I bit-convert between Int and Word quickly?

Haskell base documentation 表示“Word 是无符号整数类型,与 Int 大小相同。”

如何获取 Int 并将其位表示形式转换为 Word,从而获得与原始 Int 具有相同位表示形式的 Word 值](即使它们代表的数字值会不同)?

不能使用fromIntegral因为那会改变位表示。

可以 使用 the Bits class 循环遍历这些位,但我怀疑这会很慢 - 而且我不需要进行任何类型的位操作.我想要某种将被编译为无操作(或接近它)的函数,因为没有完成任何转换。

动机

我想使用 IntSet 作为快速整数集实现 - 然而,我真正想要存储在其中的是 Words。我觉得我可以创建一个由 IntSet 支持的 WordSet,方法是在它们之间快速转换。问题是,我不想按值转换,因为我不想截断 Word 值的上半部分:我只想保持位表示相同。

int2Word#/word2Int# in GHC.Prim 执行位转换。您可以轻松使用它们实现在盒装 Int/Word 之间转换的包装函数。