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 關注
- 171 瀏覽
添加回答
舉報