我正在編寫以下代碼來計算人口數(shù)量,如下所示:package mainimport ( "fmt")func main() { var pc [256]byte for i := range pc { pc[i] = pc[i/2] + byte(i&1) } var x uint64 = 65535 var population uint8 for i := 0; i < 8; i++ { population = population + pc[byte(x>>(i*8))] } fmt.Printf("Population Count: %d", population)}在編譯時出現(xiàn)以下錯誤:prog.go:19:39: 無效操作:x >> (i * 8) (移位計數(shù)類型 int,必須是無符號整數(shù))問題在于i初始化 for 循環(huán)時聲明的變量。的速記初始化i使其成為int內(nèi)部類型的類型signed int32。這就是為什么下面一行:population = population + pc[byte(x>>(i*8))]導(dǎo)致問題。因為移位運算符>>只期望無符號整數(shù),但表達式i*8結(jié)果int是 internally signed int32。因為var不能在for初始化時使用。for var i uint8 = 0; i < 8; i++ { ... }語法錯誤:初始化程序中不允許使用 var 聲明i我可以在 之外聲明變量for loop,但我發(fā)現(xiàn)它不干凈且可讀。實現(xiàn)相同目標的干凈方法應(yīng)該是什么?
1 回答

明月笑刀無情
TA貢獻1828條經(jīng)驗 獲得超4個贊
Go 編程語言規(guī)范
變量聲明
...每個變量在賦值中被賦予相應(yīng)初始化值的類型。
i := uint(0)
.?例如,
package main
import (
? ? "fmt"
)
func main() {
? ? var pc [256]byte
? ? for i := range pc {
? ? ? ? pc[i] = pc[i/2] + byte(i&1)
? ? }
? ? var x uint64 = 65535
? ? var population uint8
? ? for i := uint(0); i < 8; i++ {
? ? ? ? population = population + pc[byte(x>>(i*8))]
? ? }
? ? fmt.Printf("Population Count: %d", population)
}
輸出:
Population?Count:?16
- 1 回答
- 0 關(guān)注
- 138 瀏覽
添加回答
舉報
0/150
提交
取消