在Haskell中的零填充右移是什么?

6
我正在尝试使用 Haskell 进行编程(并非常享受),现在我想要进行 零填充右移 操作。我前往 hackage 找到了 Data.Bits,打开了 ghci 并输入了以下代码(当然,我没有输入 -3):
:m Data.Bits   
shiftR (-9) 2
-3

太棒了,一个常规的右移,正是我所期望的。
好的,现在我会仔细阅读文档。我看到了 unsafeShiftR,但那不是我想要的。
那么,我错过了什么?在Haskell中是否有可用的零填充右移函数(即当-9向右移动2位时返回1073741821)?

shiftR不是您需要的吗?我建议使用固定长度类型,例如 Data.Word.Word8shiftR (1 :: Word8) 1 === 0rotateR (1 :: Word8) 1 === 128 - bheklilr
1个回答

9

Data.Bits 考虑了有符号类型。然而,由于任何带有非零移位的零填充右移都会导致无符号类型,因此您可以将输入简单地转换为正确大小的字:

-- :m Data.Word
-- shiftR ((fromIntegral x) :: Word32) 2
shiftR (-9 :: Word32) 2
1073741821

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接