右移后如何应用蒙版以仅获得一位?这取决于您向右移动了多少位置?
在 32 位结构中,我试图获取第 9 位和第 10 位的值。
x := uint32(11537664)
0000 0000 1011 0000 0000 1101 0000 0000
^^
那么对于第 9 位,如果我右移 23 位,我需要屏蔽一个字节吗?这似乎隔离了第 9 位,因为我得到的值为 1。
(x >> 23) & 0xff
9th bit...should be 1... looks ok.
00000000000000000000000000000001
0x1
因此,为了获得应该为 0 的第 10 位,我将少移一位,这确实使 0 一直向右移动。但是后面有一个 1 需要被屏蔽。我为掩码计算了 1 个字节加 1 个位,但我仍然看到位置 2 中的位,所以这是不对的。
(x >> 22) & 0x1ff
10th bit... should be 0, but this shift and mask does not look correct.
00000000000000000000000000000010
^ This bit I don't want.
0x2
示例链接:https: //play.golang.org/p/zqofCAAKDZz
package main
import (
"fmt"
)
func bin(i uint32) {
fmt.Printf("%032b\n", i)
}
func hex(i uint32) {
fmt.Printf("0x%x\n", i)
}
func show(i uint32) {
bin(i)
hex(i)
fmt.Println()
}
func main() {
x := uint32(11537664)
fmt.Println("Data")
show(x)
fmt.Println("First 8 bits.")
show(x >> 24)
fmt.Println("9th bit...should be 1")
show((x >> 23) & 0xff)
fmt.Println("10th bit... should be 0")
show((x >> 22) & 0x1ff)
}
交互式爱情
相关分类