为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 for 循环初始化中声明 uint8,因为在 for 循环初始化中不允许使用 var

如何在 for 循环初始化中声明 uint8,因为在 for 循环初始化中不允许使用 var

Go
九州编程 2023-05-04 17:03:00
我正在编写以下代码来计算人口数量,如下所示: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


查看完整回答
反对 回复 2023-05-04
  • 1 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信