第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Golang int to uint8 converison,未檢測到溢出

Golang int to uint8 converison,未檢測到溢出

Go
冉冉說 2022-06-27 17:29:28
我一直在制作“A Tour of Go”,并在 Pic 函數(shù)中發(fā)生了一些奇怪的行為。它涉及int -> uint8轉(zhuǎn)換。dx和dy的值在程序執(zhí)行時默認為256。這樣嵌套 for 循環(huán)內(nèi)的x+y就會上升到510!(255+255)盡管如此,Golang 在將溢出的x+y轉(zhuǎn)換為 uint8 時沒有看到任何問題,但是當我將其更改為一些硬編碼值時,比如說 uint8(321),我立即得到一個溢出錯誤。有人可以向我解釋這種奇怪的行為嗎?package mainimport "golang.org/x/tour/pic"func Pic(dx, dy int) [][]uint8 {    canvas := make([][]uint8, dy)    for y := 0; y < dy; y++ {        canvas[y] = make([]uint8, dx)        for x := 0; x < dx; x++ {            canvas[y][x] = uint8(x+y) // <- here it is        }    }        return canvas;}func main() {    pic.Show(Pic)}獲得的錯誤:go: finding module for package golang.org/x/tour/picgo: downloading golang.org/x/tour v0.0.0-20200508155540-0608babe047dgo: found golang.org/x/tour/pic in golang.org/x/tour v0.0.0-20200508155540-0608babe047d./prog.go:11:24: constant 321 overflows uint8Go build failed.
查看完整描述

1 回答

?
互換的青春

TA貢獻1797條經(jīng)驗 獲得超6個贊

這是來自語言規(guī)范:

類型化常量的值必須始終可以由常量類型的值準確表示。以下常量表達式是非法的:

uint(-1) // -1 不能表示為單位

int(3.14) // 3.14 不能表示為 int

在您的情況下,xand yare int,x+y也是int,并且uint8(x+y)只是截斷結(jié)果。但是,uint8(321)根據(jù)語言規(guī)范無效。但是,這是有效的:

i:=321
x:=uint8(i)


查看完整回答
反對 回復(fù) 2022-06-27
  • 1 回答
  • 0 關(guān)注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號