Haskell的零填充右移?

时间:2013-12-12 14:12:46

标签: haskell

我对Haskell有点修补(并且非常享受自己),现在我想做zero-fill right shift

我小跑到了hackage并找到Data.Bits,掀起了ghci,这就是我输入的内容(好吧,我当然没有键入-3):

:m Data.Bits   
shiftR (-9) 2
-3

Fantatstic,一个正常的右移,正是我所期待的。

好的,现在我真的会阅读文档。好的,我看到unsafeShiftR,但那不是我想要的。

那么,我错过了什么?在Haskell某处可以使用零填充右移功能(即当-9右移2时返回1073741821)?

1 个答案:

答案 0 :(得分:9)

Data.Bits会考虑签名类型。但是,由于任何零填充右移和非零移位都会导致无符号类型,因此您只需将输入转换为正确大小的单词:

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