我想对二进制数据使用 Data.Bits 位运算符。 我需要使用什么数据类型? 我编写了这个函数,例如:
ch :: Int8 -> Int8 -> Int8 -> Int8
ch x y z = (x .&. y) `xor` ((complement x) .|. z)
我想获取输入二进制类型或至少 String
(不是 Int
),但仍使用 Data.Bits
那么我需要改变什么才能像这样使用它呢? :
ch 11111111 101110011 10110101
最佳答案
如所写,ch
将仅采用 Int8
值,但您可以放宽函数的类型而不更改其实现:
import Data.Bits
ch :: Bits a => a -> a -> a -> a
ch x y z = (x .&. y) `xor` (complement x .|. z)
二进制值只是整数的特定表示,但为了使内容更具可读性,您可以启用BinaryLiterals
,例如在 GHCi 中就像这样:
*Q48065001> :set -XBinaryLiterals
*Q48065001> ch 0b11111111 0b101110011 0b10110101
-58
在代码文件中,您可以使用语言编译指示启用它:
{-# LANGUAGE BinaryLiterals #-}
如果您有二进制数字的字符串表示形式,您首先需要解析它们。参见例如Convert a string representing a binary number to a base 10 string haskell
关于haskell - 二进制表示的 Data.Bits 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48065001/