gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:37:56 25 4
gpt4 key购买 nike

我正在编写以下代码来计算人口数量,如下所示:

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 := 0; i < 8; i++ {
population = population + pc[byte(x>>(i*8))]
}

fmt.Printf("Population Count: %d", population)
}

编译时出现以下错误:

prog.go:19:39: invalid operation: x >> (i * 8) (shift count type int, must be unsigned integer)

问题出在初始化 for 循环时声明的变量 i 上。 i 的简写初始化使其成为 int 类型,其内部类型为 signed int32。这就是为什么出现以下行:

population  = population + pc[byte(x>>(i*8))]

是导致问题的原因。因为移位运算符 >>> 只需要无符号整数,但是表达式 i*8 导致 int 内部是 signed int32.

因为 var 不能用于 for 初始化。

for var i uint8 = 0; i < 8; i++ { ... }

syntax error: var declaration not allowed in for initializer

我可以在 for 循环 之外声明变量 i,但我发现它不干净且可读。

实现相同目标的简洁方法应该是什么?

最佳答案

The Go Programming Language Specification

Variable declarations

... each variable is given the type of the corresponding initialization value in the assignment.


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)
}

Playground :https://play.golang.org/p/H_4cn9w_dOq

输出:

Population Count: 16

关于go - 如何在 for 循环初始化中声明 uint8,因为在 for 循环初始化中不允许使用 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53058108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com