任何Word32
数字都可以表示为Word8
数字的线性组合,如下所示:
x = a + b * 2^8 + c * 2^16 + d * 2^24
换句话说,这是x
在 base 中的表示2^8
。为了获得这些因素,我实现了以下功能:
word32to8 :: Word32 -> (Word8,Word8,Word8,Word8)
word32to8 n = (fromIntegral a,fromIntegral b,fromIntegral c,fromIntegral d)
where
(d,r1) = divMod n (2^24)
(c,r2) = divMod r1 (2^16)
(b,a) = divMod r2 (2^8)
它可以正常工作,但是由于我的程序多次使用此功能,我认为你们可以给我一个关于如何改进(如果可能)此操作的性能的想法。任何微小的改进对我来说都是好的,无论是在时间上还是空间上。对我来说,它看起来如此简单,以至于无法实现性能提升,但我仍然想问这个问题,以防万一我遗漏了什么。
顺便说一句,我对 的所有重复感到恼火fromIntegral
,但转换是必要的,以便类型可以匹配。
提前致谢。