Skip to content

Представление литералов основных числовых значений

Числовой литерал можно использовать для представления целочисленного значения только в том случае, если его не нужно округлять. Например, 1.23e2 может представлять значения любых основных целочисленных типов, но 1.23 не может представлять значения любых основных целочисленных типов. Округление допускается при использовании числового литерала для представления нецелых основных числовых значений. 
Каждый базовый числовой тип имеет представляемый диапазон значений. Итак, если литерал выходит за пределы диапазона значений типа, то литерал не может быть представлен как значения типа

Некоторые примеры:

БуквальныйТипы, значения которых может представлять литерал
256Все основные числовые типы, кроме типов int8 и uint8.
255Все основные числовые типы, кроме типов int8.
-123Все основные числовые типы, кроме беззнаковых.
123Все основные числовые типы.
123.000
1.23e2
‘a’
1.0+0i
1.23Все основные типы с плавающей запятой и сложные числовые типы.
0x10000000000000000(16 нулей)
3.5e38Все основные типы с плавающей запятой и комплексные числовые типы, кроме типов float32 и complex64.
1+2iВсе основные сложные числовые типы.
2e+308Нет базовых типов.

Заметки:

  • Поскольку никакие значения базовых целочисленных типов, представленных в Go, не могут содержать 0x10000000000000000, литерал не может быть представлен как значения каких-либо базовых целочисленных типов.
  • Максимальное значение IEEE-754 float32, которое может быть точно представлено, равно 3.40282346638528859811704183484516925440e+38, поэтому 3.5e38 оно не может быть представлено в виде значений любых типов float32 и complex64.
  • Максимальное значение IEEE-754 float64, которое может быть точно представлено, равно 1.797693134862315708145274237317043567981e+308, поэтому 2e+308 оно не может быть представлено в виде значений любых типов float64 и complex128
  • Обрати внимание, что хотя 0x10000000000000000 может представлять значения типов float32, он не может точно представлять любые значения float32 в памяти. Оно будет округлено до ближайшего значения float32, которое может быть точно представлено в памяти при использовании в качестве значений типов float32.