【问题标题】:How do you read every N bits?你如何读取每 N 位?
【发布时间】:2021-12-20 19:40:03
【问题描述】:

有一个 64 位有符号整数,我尝试每 4 位读取一次。

a := int64(1229782938247303441)
for i := 0; i < 16; i++ {
    fmt.Printf("%v\n", byte(a) >> 4)
    a >>=  4 
}

最后一个值是 0,应该是 1。

【问题讨论】:

    标签: go binary bit-manipulation


    【解决方案1】:

    使用a &amp; 0xf 获取底部 4 位。

    0xf 在低四位中具有一位,在所有其他位中具有零。按位与表达式 a &amp; 0xf 的结果具有来自 a 的低四位和所有其他位为零。

    a := int64(1229782938247303441)
    for i := 0; i < 16; i++ {
        fmt.Printf("%v\n", a & 0xf)
        a >>=  4 
    }
    

    【讨论】:

    • 为什么是0xf?因为在这种情况下,0xf 是一个仅设置了底部 4 位的值,十进制 15。&amp; 0xf 屏蔽了底部 4 位上方的 a 的其余部分,a &amp; 0xf 的结果是 @987654331 中的位@ 也是0xf 中的也是 - 因此,as 底部 4 位的忠实表示。您并不是真的“每 n 位读取一次”。您每次都在对整数进行运算。
    • 我认为对于 OP 或未来的读者来说,它可能会增加你的答案,但如果你不同意,我可以清理评论;否则,我们可以在答案中添加一些关于 &amp; 的内容。
    猜你喜欢
    • 1970-01-01
    • 2011-07-28
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多