第一位的索引

时间:2017-08-08 21:03:11

标签: haskell bit-manipulation

我可以在http://hackage.haskell.org/package/base-4.7.0.0/docs/Data-Bits.html#v:bit中看到如何使用

将Int,n转换为具有第n位设置的位
bit :: Int -> a

但是,我该怎么做呢? (假设输入位只有1位设置?)

2 个答案:

答案 0 :(得分:7)

由于base-4.8.0.0

countLeadingZeros :: FiniteBits b => b -> Int
countTrailingZeros :: FiniteBits b => b -> Int

这些索引分别是从最重要和最不重要的结尾开始的最重要和最不重要的设置位。从finiteBitSize :: FiniteBits b => b -> Int减去另一端的数量。

答案 1 :(得分:3)

PUT /v2/accounts/{accountId}/envelopes/{envelopeId}/documents Headers: Authorization "Bearer [token]" Accept "application/json" Content-Type "multipart/form-data; boundary=AAAAAA" --AAAAAA Content-Type: application/json Content-Disposition: form-data { "documents": [ { "documentId": 1, "fileExtension": "pdf", "name": "test file name.pdf" } ] } --AAAAAA Content-Type: application/pdf Content-Disposition: file; filename="test file name.pdf"; fileExtension=pdf; documentId=1 Content-Transfer-Encoding: stream [Binary output] --AAAAAA-- 通过计算尾随零的数量来实现这一点。减1会将尾随零变为1并重置应该存在的唯一值。

这很容易适应更一般的情况而不假设只设置了一位输入:popCount $ x-1

主要思想是相同的,带有popCount $ complement x .&. (x-1)补集的ANDing摆脱了减法新创建的那些(这是唯一应该计算的)。