当将负数转换为无符号整数并随后添加该值时,会导致减法。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))
- 1 回答
- 0 关注
- 153 浏览
添加回答
举报
0/150
提交
取消