猿问

do + 操作时相同数据类型的行为方式

刚开始在 packthub 上学习 Go。在其中一个测验中,我看到了这个问题并在我的 VScode 上运行了它。我想知道为什么我会得到这个答案。这是代码。

package main   import "fmt" 
   func main() {
        a := uint8(255)
        b := uint8(127)
        c := a + b
        fmt.Println(a, "+", b, "=", c)
   }

输出是126。请问如何?


偶然的你
浏览 99回答 2
2回答

倚天杖

你首先要了解uint8。Uint8 的范围从 0 到 255,不超过这个范围。您已将“a”和“b”声明为 uint8。您使用隐式类型声明“c”,使其成为 uint8,最大值为 255。这就是为什么您的输出为 126。(不是 127,因为“0”也被计算在内)要完成这项工作,只需更改“a”和“b”的类型package mainimport "fmt" func main() {   a := uint16(255)   b := uint16(127)   c := a + b   fmt.Println(a, "+", b, "=", c)}

桃花长相依

您将两个变量都声明为 uint8 ,这意味着它在内存中最多占用 8 位,并且这只是一个正值,因此最大数字可能是 2^8 (256)。现在,当您添加两个数字时,它只是将其相加并返回输出 => 255 + 127 = 382;但是变量 c 也是 uint8 类型,并且这个数字超出了它的范围,因此为了将这个数字放入变量中,它用最大数字减去输出并在变量 C 中进行调整。a + b = 255 + 127 = 382c = 382 - 256  = 126
随时随地看视频慕课网APP

相关分类

Go
我要回答