亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 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 關注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號