Числовые литералы

В Ü можно довольно гибко задавать числовые литералы.

Числовые литералы характеризуются:

  • Основанием системы счисления.
  • Наличием или отсутствием дробной части.
  • Наличием или отсутствием экспоненты.
  • Типом.

Существуют следующие основания системы счисления для числовых литералов:

    1. Литерал начинается с префикса 0b. Доступны цифры 0-1.
    1. Литерал начинается с префикса 0o. Доступны цифры 0-7.
    1. Литерал не имеет префикса. Доступны цифры 0-9.
    1. Литерал начинается с префикса 0x. Доступны цифры 0-9 и a-f либо A-F.

Дробная часть задаётся через указание . после целой части литерала.

Экспонента позволена только для десятичных литералов. Задаётся экспонента через символ e, опциональный знак + или - и значение экспоненты.

Примеры литералов:

42 // Простейший десятичный литерал
3.1415926535 // Десятичный литерал с дробной частью
1e5 // Десятичный литерал без дробной части, но с экспонентой
1.5e20 // Десятичный литерал с дробной частью и экспонентой
25.3e-5 // Десятичный литерал с дробной частью и отрицательной экспонентой
695e+7 // Десятичный литерал с явно указанной положительной экспонентой

0b1110 // Двоичный литерал
0b1.101 // Двоичный литерал с дробной частью

0o7124 // Восьмеричный литерал
0o7124.1005 // Восьмеричный литерал c дробной частью

0xAB054FE // Шестнадцатеричный литерал
0xAb054Fe // Разницы между заглавными A-F и строчными a-f нету
0x70.F4 // Шестнадцатеричный литерал с дробной частью

Тип числового литерала

Каждый числовой литерал имеет тип. Тип или можно указать явно - через суффикс типа, или же тип будет выбран неявно.

Имя любого фундаментального типа можно использовать в качестве суффикса типа. Кроме этого, есть ряд дополнительных суффиксов типа:

  • u - суффикс для типа u32.
  • s - суффикс для типа size_type.
  • f - суффикс для типа f32.
  • c8 - суффикс для типа char8.
  • c16 - суффикс для типа char16.
  • c32 - суффикс для типа char32.

Если суффикс типа не указан явно, тип для литерала будет выбран следующим способом: если литерал имеет дробную часть, его типом будет f64, иначе - i32.

55 // i32
64125 // i32
1e5 // i32
52.0 // f64

0b110 // i32
0b110.1 // f64

0o07741 // i32
0o0.722 // f64

0xFF // i32
0x541E.aa // f64

0u // u32
0x100u // u32

128s // size_type
0o521s // size_type

0.5f // f32
0b100f // f32

88c8 // char8
0b0c16 // char16
220c32 // char32

0i16 // i16
55f64 // f64
925u64 // u64
220char16 // char16