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

转换负数。

转换负数。

Go
ibeautiful 2023-06-26 17:02:30
当将负数转换为无符号整数并随后添加该值时,会导致减法。a := (uint8)(10) b := (int8)(-8) fmt.Println(a + (uint8)(b)) // result: 2这是一种惯用的方法还是应该更明确地进行?
查看完整描述

1 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

由于该类型是无符号的,因此它是溢出
uint8(b)248,所以a + uint8(b)10+248=258=> 255 0 1 2 => 2

我的问题更多是关于当值(有时您想加,有时想减)来自参数(必须是有符号类型)时如何从无符号整数中减去,这使得您必须在减法之前进行类型转换/添加。

同时使用int8


    a := int8(10)

    b := int8(-8)

    fmt.Println(a + b) // 2

    fmt.Println(a - b) // 18

您可以避免溢出,如下所示:


    a := uint8(10)

    b := int8(-8)

    c := uint8(b)

    d := uint16(a) + uint16(c)

    fmt.Println(d) // 258

您应该在此处删除多余的括号:


a := (uint8)(10)

b := (int8)(-8)

fmt.Println(a + (uint8)(b))


用这个:


a := uint8(10)

b := int8(-8)

fmt.Println(a + uint8(b))


查看完整回答
反对 回复 2023-06-26
  • 1 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

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