我对Haskell有点修补(并且非常享受自己),现在我想做zero-fill right shift。
我小跑到了hackage并找到Data.Bits,掀起了ghci,这就是我输入的内容(好吧,我当然没有键入-3):
:m Data.Bits
shiftR (-9) 2
-3
Fantatstic,一个正常的右移,正是我所期待的。
好的,现在我真的会阅读文档。好的,我看到unsafeShiftR
,但那不是我想要的。
那么,我错过了什么?在Haskell某处可以使用零填充右移功能(即当-9右移2时返回1073741821)?
答案 0 :(得分:9)
Data.Bits
会考虑签名类型。但是,由于任何零填充右移和非零移位都会导致无符号类型,因此您只需将输入转换为正确大小的单词:
-- :m Data.Word
-- shiftR ((fromIntegral x) :: Word32) 2
shiftR (-9 :: Word32) 2
1073741821