go - Golang 中的 0x1 是什么意思?
问题描述
我试图理解这段代码用于返回一个字节数组前缀有多少个零,但我不确定 0x1 是什么。谷歌搜索没有帮助,但我假设0x1
是返回第一位?这些叫什么?
另外,我知道这是一个单独的问题,但我不认为它需要一个新线程:我不太明白为什么我们在这里嵌套一个循环,位移,并从 7 中减去 j。这就是字节转换成二进制?
IdLength := 32
func PrefixLen(count [IdLength]byte) int {
for i := 0; i < IdLength; i++ {
for j := 0; j < 8; j++ {
if (count[i]>>uint8(7-j))&0x1 != 0 {
return i*8 + j
}
}
}
return IdLength*8 - 1
}
解决方案
0x1
只是 number 的十六进制表示法1
。你&
用一些整数0x1
来获得它的最低有效位(最右边)。你写0x1
而不是1
使用位掩码,因为从基数 16 转换比从基数 10 到基数 2 更容易。
对于第二个问题,func PrefixLen
它的作用是在 的开头找到连续零的数量count
。外循环每次处理一个字节,内循环处理单独的位:当 j=0 时,它向右移动 7,从而从左得到第一位,当 j=1 时,它移动 6 得到第二位,依此类推在。当1
遇到位时,它会返回已检查的位计数。
推荐阅读
- c - C链表removeLast使用指针
- javascript - 这是 url 编码的正确方法/此服务器是否正确处理解码?
- java - BufferedReader readLine 未使用 HttpURLConnection 到达流的末尾
- python - 从 csv 列中提取最常见的组合
- c# - 从基本视图模型动态分配视图模型中的属性
- android - Firebase 了解为 addValueEventListener 添加或删除的数据
- java - 我需要帮助在下一行显示字符串
- jquery - jQuery 每个#anchor 做一些事情
- python-3.x - If 语句 If 和 Else 结果不起作用
- node.js - 如何使用 node.js 读取 excel 文件