刚开始在 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 关注
- 98 浏览
添加回答
举报
0/150
提交
取消