我正在编写以下代码来计算人口数量,如下所示: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 关注
- 97 浏览
添加回答
举报
0/150
提交
取消