Haskell的零填充右移?

kmp*_*kmp 6 haskell

我对Haskell有点修补(并且非常享受自己),现在我想做一个零填充右移.

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

:m Data.Bits   
shiftR (-9) 2
-3
Run Code Online (Sandbox Code Playgroud)

Fantatstic,一个正常的右移,正如我所期待的那样.

好的,现在我真的会阅读文档.好的,我明白了unsafeShiftR,但那不是我想要的.

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

Zet*_*eta 9

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

-- :m Data.Word
-- shiftR ((fromIntegral x) :: Word32) 2
shiftR (-9 :: Word32) 2
1073741821
Run Code Online (Sandbox Code Playgroud)