gpt4 book ai didi

go - 2 个表达式之间的单个 & 符号

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

我在看 Go 语言源代码,模块 math/rand .我发现了一条有趣的线

if n&(n-1) == 0 { // n is power of two, can mask

我很好奇,n&(n-1) 是什么意思?

我会理解 n && (n-1)。它将是 2 个 bool 表达式之间的 AND 运算符。我会理解 &n。它是 n 变量的地址。但是什么是 n&(n-1) 我想不通。

完整方法代码:

// Int63n returns, as an int64, a non-negative pseudo-random number in [0,n).
// It panics if n <= 0.
func (r *Rand) Int63n(n int64) int64 {
if n <= 0 {
panic("invalid argument to Int63n")
}
if n&(n-1) == 0 { // n is power of two, can mask
return r.Int63() & (n - 1)
}
max := int64((1 << 63) - 1 - (1<<63)%uint64(n))
v := r.Int63()
for v > max {
v = r.Int63()
}
return v % n
}

最佳答案

这是 bitwise AND运营商。

// Prints 2, because 3 (0x0011) & 2 (0x0010) = 2 (0x0010)
fmt.Println(3 & 2)

http://play.golang.org/p/JFto4ZHUEC

关于go - 2 个表达式之间的单个 & 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30733455/

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