1 回答
TA贡献1712条经验 获得超3个赞
移位后,您会得到一个数字0b10,并且您只需要最低位。那你为什么要掩饰0x1ff呢?它有 9 个一位,这将使最低 9 位保持不变(未屏蔽)。
而是用0b01 = 0x01. 这只留下最低位,并将所有其他位归零:
show((x >> 22) & 0x01)
在Go Playground上尝试一下。
另请注意,如果您只想测试某个位是 1 还是 0,则不必移动。通过在特定位置包含单个位掩码的适当位掩码进行掩码就足够了。您可以将屏蔽结果与零进行比较。
测试第nth位的正确位掩码很简单1<<n(其中位为零索引)。您要测试的 2 位是 22. 和 23. 位。
看这个例子:
x := uint32(11537664)
fmt.Printf("x : %032b\n", x)
fmt.Println()
const mask22 = 1 << 22
fmt.Printf("mask22 : %032b\n", mask22)
fmt.Printf("22. bit: %032b %t\n", x&mask22, x&mask22 != 0)
fmt.Println()
const mask23 = 1 << 23
fmt.Printf("mask23 : %032b\n", mask23)
fmt.Printf("23. bit: %032b %t\n", x&mask23, x&mask23 != 0)
它输出(在Go Playground上尝试):
x : 00000000101100000000110100000000
mask22 : 00000000010000000000000000000000
22. bit: 00000000000000000000000000000000 false
mask23 : 00000000100000000000000000000000
23. bit: 00000000100000000000000000000000 true
- 1 回答
- 0 关注
- 114 浏览
添加回答
举报