3 回答
TA贡献1773条经验 获得超3个赞
Go 1.13 发行说明(2019 年 9 月)
语言的变化
根据已签名的班次计数提案, Go 1.13 删除了班次计数必须无符号的限制。此更改消除了对许多人工 uint 转换的需要,这些转换仅仅是为了满足 << 和 >> 运算符的此(现已删除)限制而引入的。
invalid operation: 1 << bucketCntBits (shift count type int, must be unsigned integer)
对于 Go 1.13(2019 年 9 月)及更高版本,这不再是错误。
你的例子,
package main
import "fmt"
func main() {
bucketCntBits := 3
bucketCnt := 1 << bucketCntBits
fmt.Println(bucketCnt)
}
输出:
$ go version
go version devel +66ff373911 Sat Aug 24 01:11:56 2019 +0000 linux/amd64
$ go run shift.go
8
TA贡献1966条经验 获得超4个赞
或者,您可以将类型uint8, uint16,uint32或强制转换uint64为整数文字。例如,
func main() {
bucketCntBits := uint32(3)
bucketCnt := 1 << bucketCntBits
fmt.Println(bucketCnt)
}
输出:
8
TA贡献1812条经验 获得超5个赞
使用math/bits包你可以做这样的事情:
package main
import (
"fmt"
"math/bits"
)
func main() {
bucketCntBits := 3
bucketCnt := bits.RotateLeft(1, bucketCntBits)
fmt.Println("Hello, playground", bucketCnt)
}
https://play.golang.org/p/fVK2xysL896
- 3 回答
- 0 关注
- 118 浏览
添加回答
举报