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

Нетипизированные константы произвольной точности

Вопрос

Скомпилируется ли код и что он выведет?

const Big = 1 << 100
fmt.Println(Big >> 100)

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

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

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

Коротко

Правильный ответ: Выведет 1: константа считается с произвольной точностью. Нетипизированные константные выражения вычисляются компилятором с точностью не меньше 256 бит.

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

  1. Не скомпилируется: 1 << 100 переполняет int
  2. Выведет 1: константа считается с произвольной точностьюправильный ответ
  3. Выведет 0: при сдвиге старшие биты теряются
  4. Скомпилируется, но упадёт с panic при запуске

Разбор

Нетипизированные константные выражения вычисляются компилятором с точностью не меньше 256 бит. Big нигде не присваивается переменной, поэтому переполнения нет. Big >> 100 вычисляется при компиляции и равно 1, а константа 1 спокойно становится int при передаче в Println. Ошибка была бы при var x int = Big. Паники от констант не бывает: всё считается при компиляции.

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

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

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