剛開始在 packthub 上學習 Go。在其中一個測驗中,我看到了這個問題并在我的 VScode 上運行了它。我想知道為什么我會得到這個答案。這是代碼。package main import "fmt"
func main() {
a := uint8(255)
b := uint8(127)
c := a + b
fmt.Println(a, "+", b, "=", c)
}輸出是126。請問如何?
2 回答

倚天杖
TA貢獻1828條經驗 獲得超3個贊
你首先要了解uint8。Uint8 的范圍從 0 到 255,不超過這個范圍。您已將“a”和“b”聲明為 uint8。您使用隱式類型聲明“c”,使其成為 uint8,最大值為 255。這就是為什么您的輸出為 126。(不是 127,因為“0”也被計算在內)
要完成這項工作,只需更改“a”和“b”的類型
package main
import "fmt"
func main() {
a := uint16(255)
b := uint16(127)
c := a + b
fmt.Println(a, "+", b, "=", c)
}

桃花長相依
TA貢獻1860條經驗 獲得超8個贊
您將兩個變量都聲明為 uint8 ,這意味著它在內存中最多占用 8 位,并且這只是一個正值,因此最大數字可能是 2^8 (256)。
現在,當您添加兩個數字時,它只是將其相加并返回輸出 => 255 + 127 = 382;
但是變量 c 也是 uint8 類型,并且這個數字超出了它的范圍,因此為了將這個數字放入變量中,它用最大數字減去輸出并在變量 C 中進行調整。
a + b = 255 + 127 = 382
c = 382 - 256
= 126
- 2 回答
- 0 關注
- 115 瀏覽
添加回答
舉報
0/150
提交
取消