为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
偶然的你 2022-06-01 11:35:36
刚开始在 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)

}


查看完整回答
反对 回复 2022-06-01
?
桃花长相依

TA贡献1860条经验 获得超8个赞

您将两个变量都声明为 uint8 ,这意味着它在内存中最多占用 8 位,并且这只是一个正值,因此最大数字可能是 2^8 (256)。


现在,当您添加两个数字时,它只是将其相加并返回输出 => 255 + 127 = 382;


但是变量 c 也是 uint8 类型,并且这个数字超出了它的范围,因此为了将这个数字放入变量中,它用最大数字减去输出并在变量 C 中进行调整。


a + b = 255 + 127 = 382


c = 382 - 256

  = 126


查看完整回答
反对 回复 2022-06-01
  • 2 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信