在将负数强制转换为无符号整数并随后加上该值时,将导致相减。
a := (uint8)(10)
b := (int8)(-8)
fmt.Println(a + (uint8)(b)) // result: 2
这是一种惯用的方法还是应该更明确地进行?
答案 0 :(得分:2)
由于类型是无符号的,因此它是overflow:
uint8(b)
是248
,所以a + uint8(b)
是10+248=258=256+2 => 2
我的问题更多是关于如何从无符号整数中减去 值(有时要加,有时要减去)即将到来 从参数(必须是带符号的类型)中获取,以便 您必须先进行类型转换,然后再进行减法/加法运算。
您可以同时使用int8
:
a := int8(10)
b := int8(-8)
fmt.Println(a + b) // 2
fmt.Println(a - b) // 18
您可以避免溢出,例如this:
a := uint8(10)
b := int8(-8)
c := uint8(b)
d := uint16(a) + uint16(c)
fmt.Println(d) // 258
您应在此处删除3对多余的括号:
a:=(uint8)(10)
b:=(int8)(-8)
fmt.Println(a +(uint8)(b))
使用此:
a := uint8(10)
b := int8(-8)
fmt.Println(a + uint8(b))