我正在編寫以下代碼來計算人口數量,如下所示: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)}在編譯時出現以下錯誤:prog.go:19:39: 無效操作:x >> (i * 8) (移位計數類型 int,必須是無符號整數)問題在于i初始化 for 循環時聲明的變量。的速記初始化i使其成為int內部類型的類型signed int32。這就是為什么下面一行:population = population + pc[byte(x>>(i*8))]導致問題。因為移位運算符>>只期望無符號整數,但表達式i*8結果int是 internally signed int32。因為var不能在for初始化時使用。for var i uint8 = 0; i < 8; i++ { ... }語法錯誤:初始化程序中不允許使用 var 聲明i我可以在 之外聲明變量for loop,但我發現它不干凈且可讀。實現相同目標的干凈方法應該是什么?
1 回答

明月笑刀無情
TA貢獻1828條經驗 獲得超4個贊
Go 編程語言規范
變量聲明
...每個變量在賦值中被賦予相應初始化值的類型。
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 關注
- 142 瀏覽
添加回答
舉報
0/150
提交
取消