gpt4 book ai didi

go - 他们为什么不使用 int 来定义常量而不是使用位移运算符?

转载 作者:IT王子 更新时间:2023-10-29 02:26:24 26 4
gpt4 key购买 nike

go source code , 常量 bucketCnt是8。为什么定义为右移3次而不是仅仅定义为8。我明白 1 << x暗示2^x .

但是,我的问题是...

// Maximum number of key/value pairs a bucket can hold.
bucketCntBits = 3
bucketCnt = 1 << bucketCntBits

优于

// Maximum number of key/value pairs a bucket can hold.
bucketCnt = 8

最佳答案

const (
// Maximum number of key/value pairs a bucket can hold.
bucketCntBits = 3
bucketCnt = 1 << bucketCntBits
)

一个桶可以容纳的键/值对的数量取决于使用的位数(bucketCntBits = 3)。这转化为 bucketCnt 的存储桶计数 ( 1 << bucketCntBits )或 8. 如果我们将位数更改为 4(bucketCntBits = 4)或 2(bucketCntBits = 2),则 bucketCnt还是1 << bucketCntBits或 16 或 4。

// A map is just a hash table. The data is arranged
// into an array of buckets. Each bucket contains up to
// 8 key/value pairs. The low-order bits of the hash are
// used to select a bucket. Each bucket contains a few
// high-order bits of each hash to distinguish the entries
// within a single bucket.

“哈希的低位用于选择一个桶。”

引用资料:

src/runtime/hashmap.go

Go maps in action

GopherCon 2016: Keith Randall - Inside the Map Implementation

Macro View of Map Internals In Go (2013)

关于go - 他们为什么不使用 int 来定义常量而不是使用位移运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42743322/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com