转换负数。

当将负数转换为无符号整数并随后添加该值时,会导致减法。

a := (uint8)(10)
b := (int8)(-8)
fmt.Println(a + (uint8)(b)) // result: 2

这是一种惯用的方法还是应该更明确地进行?


ibeautiful
浏览 154回答 1
1回答

慕尼黑5688855

由于该类型是无符号的,因此它是溢出: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))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go