我正在尝试使用 Haskell 进行编程(并非常享受),现在我想要进行 零填充右移 操作。我前往 hackage 找到了 Data.Bits,打开了 ghci 并输入了以下代码(当然,我没有输入 -3)::m Data.Bits shiftR (-9) 2 -3 太棒了,一个常规的右移,正是我所期望的。好的,现在我会仔细阅读文档。我看到了 unsafeShiftR,但那不是我想要的。那么,我错过了什么?在Haskell中是否有可用的零填充右移函数(即当-9向右移动2位时返回1073741821)?
Data.Bits 考虑了有符号类型。然而,由于任何带有非零移位的零填充右移都会导致无符号类型,因此您可以将输入简单地转换为正确大小的字: -- :m Data.Word -- shiftR ((fromIntegral x) :: Word32) 2 shiftR (-9 :: Word32) 2 1073741821
shiftR
不是您需要的吗?我建议使用固定长度类型,例如Data.Word.Word8
:shiftR (1 :: Word8) 1 === 0
,rotateR (1 :: Word8) 1 === 128
。 - bheklilr