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

ojo*_*ojo 2 go

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

package main
   import "fmt" 

   func main() {
        a := uint8(255)
        b := uint8(127)
        c := a + b
        fmt.Println(a, "+", b, "=", c)
   }
Run Code Online (Sandbox Code Playgroud)

输出是 126。请问如何?

小智 5

您首先必须了解 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)
}
Run Code Online (Sandbox Code Playgroud)