如何快速在 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
作为快速整数集实现 - 然而,我真正想要存储在其中的是 Word
s。我觉得我可以创建一个由 IntSet
支持的 WordSet
,方法是在它们之间快速转换。问题是,我不想按值转换,因为我不想截断 Word
值的上半部分:我只想保持位表示相同。
int2Word#
/word2Int#
in GHC.Prim
执行位转换。您可以轻松使用它们实现在盒装 Int
/Word
之间转换的包装函数。
Haskell base
documentation 表示“Word 是无符号整数类型,与 Int 大小相同。”
如何获取 Int
并将其位表示形式转换为 Word
,从而获得与原始 Int
具有相同位表示形式的 Word
值](即使它们代表的数字值会不同)?
我不能使用fromIntegral
因为那会改变位表示。
我 可以 使用 the Bits
class 循环遍历这些位,但我怀疑这会很慢 - 而且我不需要进行任何类型的位操作.我想要某种将被编译为无操作(或接近它)的函数,因为没有完成任何转换。
动机
我想使用 IntSet
作为快速整数集实现 - 然而,我真正想要存储在其中的是 Word
s。我觉得我可以创建一个由 IntSet
支持的 WordSet
,方法是在它们之间快速转换。问题是,我不想按值转换,因为我不想截断 Word
值的上半部分:我只想保持位表示相同。
int2Word#
/word2Int#
in GHC.Prim
执行位转换。您可以轻松使用它们实现在盒装 Int
/Word
之间转换的包装函数。