Выбор ответа Senior Типы и нулевые значения обновлено
Нетипизированные константы произвольной точности
Вопрос
Скомпилируется ли код и что он выведет?
const Big = 1 << 100
fmt.Println(Big >> 100)
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Выведет 1: константа считается с произвольной точностью. Нетипизированные константные выражения вычисляются компилятором с точностью не меньше 256 бит.
Варианты ответа
- Не скомпилируется:
1 << 100переполняет int - Выведет 1: константа считается с произвольной точностьюправильный ответ
- Выведет 0: при сдвиге старшие биты теряются
- Скомпилируется, но упадёт с panic при запуске
Разбор
Нетипизированные константные выражения вычисляются компилятором с точностью не меньше 256 бит. Big нигде не присваивается переменной, поэтому переполнения нет. Big >> 100 вычисляется при компиляции и равно 1, а константа 1 спокойно становится int при передаче в Println. Ошибка была бы при var x int = Big. Паники от констант не бывает: всё считается при компиляции.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Типы и нулевые значения»
- Перевод числа между системами счисления на Go
- Права доступа битовой маской на Go
- Наименьший целый тип для суммы на Go
- Что выведет Go: преобразования чисел
- Что выведет Go: iota с выражением
- Что выведет Go: затенение переменной в if
- type A = B и type A B
- byte и rune