go - Golang中的0x1是什么意思?

标签 go memory binary byte

我试图理解这段用于返回字节数组前缀为多少个零的代码,但我不确定 0x1 是什么。 Google 搜索没有帮助,但我假设 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 只是数字 1 的十六进制表示法。您 & 一些带有 0x1 的整数以获得其最低有效位(最右边)。当使用位掩码时,你写 0x1 而不是 1 因为从 base 16 转换比从 base 10 转换为 base 2 更容易。

对于第二个问题,func PrefixLen 所做的是找出count 开头的连续零的个数。外层循环每次处理一个字节,内层循环处理不同的位:当 j=0 时,它向右移动 7,从而从左边移出第一个位,当 j=1 时,它移 6 位,得到第二个位,依此类推在。当遇到 1 时,它会返回已检查的位数。

关于go - Golang中的0x1是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53167273/

相关文章:

logging - Golang logrus 日志在控制台中可用但未发送到 loggly

amazon-web-services - 即使控制台关闭也继续运行 golang 项目

c - 为什么 malloc(1) 用于存储 4 字节整数?

c++ - VirtualAllocEx 成功返回一个基地址,但是 WriteProcess 失败,错误是 487

c++ - 将 2 个字符转换为其 ascii 二进制代码

linux - ELF程序头虚拟地址和文件偏移量

google-app-engine - 如何在 Google App Engine 中使用 Gin-gonic 中间件?

json - 如何使用 Go 漂亮地打印 JSON?

c++ - 如何在 Windows 映射我的程序的 DLL 之前保留内存区域?

delphi - delphi中的文件快速读/写