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

Isa*_*kel 6 haskell integer cpu-word

Haskell的base文件说:“一个字一个无符号整数类型,同尺寸的诠释。”

如何将 anInt的位表示转换为 a Word,以便获得Word与原始位表示相同的值Int(即使它们表示的数值会不同)?

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

可能通过与位循环Bits,但我怀疑,这将是非常缓慢的-我不需要做任何形式的位操作的。我想要某种将被编译为无操作(或接近它)的函数,因为没有进行转换。

动机

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

小智 5

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