Выбор ответа Junior Типы и нулевые значения обновлено

Переполнение int8 в рантайме

Вопрос

Что выведет код?

var x int8 = 127
x++
fmt.Println(x)

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: -128. Знаковые целые в Go при переполнении во время выполнения заворачиваются по модулю 2^8: 127 + 1 даёт -128.

Варианты ответа

  1. 128
  2. panic: integer overflow
  3. Ошибка компиляции
  4. -128правильный ответ

Разбор

Знаковые целые в Go при переполнении во время выполнения заворачиваются по модулю 2^8: 127 + 1 даёт -128. Паники нет, Go не проверяет переполнение. Ошибка компиляции была бы, если бы переполнялась константа, например var x int8 = 128. Здесь значение получается в рантайме.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме