Представление литералов основных числовых значений
Числовой литерал можно использовать для представления целочисленного значения только в том случае, если его не нужно округлять. Например, 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.