Голанг, печатающий отрицательные числа - PullRequest
1 голос
/ 22 июня 2019

При типизации отрицательного числа в целое число без знака и последующем добавлении этого значения это приводит к вычитанию.

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

Это идиоматический подход или его следует делать более явно?

1 Ответ

2 голосов
/ 22 июня 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...