Как ведет себя тот же тип данных, когда операция + - PullRequest
1 голос
/ 25 апреля 2020

Только начал изучать Go на packthub. В одном из тестов я увидел этот вопрос и запустил его на своем VScode. Я хочу знать, почему я получаю этот ответ. Вот код.

package main
   import "fmt" 

   func main() {
        a := uint8(255)
        b := uint8(127)
        c := a + b
        fmt.Println(a, "+", b, "=", c)
   }

Вывод 126. Как пожалуйста?

Ответы [ 2 ]

4 голосов
/ 25 апреля 2020

Сначала вы должны понять uint8. Uint8 имеет диапазон от 0 до 255, не более того. Вы объявили «a» и «b» как uint8. Вы объявляете «c» с неявным типом, который делает его uint8, который имеет максимальное значение 255. Именно поэтому вы выводите 126. (не 127, потому что «0» также считается)

Для заставить эту работу просто поменять тип "а" и "б"

package main
import "fmt" 

func main() {
   a := uint16(255)
   b := uint16(127)
   c := a + b
   fmt.Println(a, "+", b, "=", c)
}
2 голосов
/ 25 апреля 2020

Вы объявили обе переменные как uint8, что означает, что они занимают максимум 8 бит в памяти, и это только положительное значение, поэтому максимальное число может быть 2 ^ 8 (256).

Теперь, когда вы добавляете два числа, это просто добавляет его и возвращает результат => 255 + 127 = 382;

Но переменная c также имеет тип uint8, и это число выходит за пределы диапазона, поэтому, чтобы соответствовать этому числу в переменной, оно вычитает выход с максимальным числом и настраивается в переменной C.

a + b = 255 + 127 = 382

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