你如何读取每 N 位?

Posted

技术标签:

【中文标题】你如何读取每 N 位?【英文标题】:How do you read every N bits? 【发布时间】: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。

【问题讨论】:

【参考方案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; 的内容。

以上是关于你如何读取每 N 位?的主要内容,如果未能解决你的问题,请参考以下文章

如何从/向流写入/读取位? (C#)

STM8S单片机UART串口通信如何实现连续发送和接收两个8位数据

在sql数据库中,一个表中某一个字段有很多用,隔开的数据,请问用sql语句如何分别读取这个表中的每一个数据

给定一个不多于5位的正整数,求它是几位数并且按逆序分别输出每一位数字的C语言程序如何编写?

当某些行包含逗号作为千位分隔符和“标志并且没有小数的行没有标志时如何在R中读取数据

如何读取stm32 flash里面的内容