【发布时间】: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
有一个 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
使用a & 0xf 获取底部 4 位。
值0xf 在低四位中具有一位,在所有其他位中具有零。按位与表达式 a & 0xf 的结果具有来自 a 的低四位和所有其他位为零。
a := int64(1229782938247303441)
for i := 0; i < 16; i++ {
fmt.Printf("%v\n", a & 0xf)
a >>= 4
}
【讨论】:
0xf?因为在这种情况下,0xf 是一个仅设置了底部 4 位的值,十进制 15。& 0xf 屏蔽了底部 4 位上方的 a 的其余部分,a & 0xf 的结果是 @987654331 中的位@ 也是0xf 中的也是 - 因此,as 底部 4 位的忠实表示。您并不是真的“每 n 位读取一次”。您每次都在对整数进行运算。
& 的内容。