Поскольку тип является беззнаковым, это переполнение :
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))
См .:
путаницао преобразовании `uint8` в` int8`