Числа и системы счисления
Десятичные, группированные, научные и компактные литералы, быстрые операторы и точные целочисленные базы (hex, binary, octal).
Numlex принимает числа так, как их пишут люди — группировка тысяч, научная запись,
компактные суффиксы вроде 1.5M — а также точные целочисленные формы 0x, 0b и
0o.
Эта страница описывает сами литеральные формы, неочевидные места с компактными
суффиксами (5m — пять миллионов, а не пять метров), необязательные быстрые операторы,
целочисленные базы с их правилами отображения и переполнения и полный набор
примеров.
Десятичные литералы
- Десятичный разделитель —
.или,в зависимости от регионального формата — см. форматы чисел и отображение. - Разделители тысяч во вводе нормализуются:
1,234→1234,1 234(зависит от формата). Внутри вызовов функций запятая может вместо этого разделять аргументы — см. встроенные функции. - Научная запись:
1.5e6,2E-3. - Пробелы вокруг операторов произвольны; скобки
( )группируют; унарные+и-допустимы.
Компактные суффиксы
Компактные суффиксы стоят сразу после числа, без пробела, и применяются к скалярам и денежным суммам:
| Суффикс | Множитель | Примеры |
|---|---|---|
k / K | ×10³ | 1.5k = 1 500; $2.5k = $2 500 |
m / M | ×10⁶ | 1.5M = 1 500 000; $2.5M = $2 500 000 |
Два момента, которые стоит знать:
5m— это 5 000 000, а не пять метров. Метру нужен пробел:5 m.G,TиP— не скалярные и не денежные суффиксы.1.5Gвычёркивает буквуGкак неизвестное слово и возвращает 1.5. Гига и тера существуют только как каталожные имена единиц, используемые с пробелом:2 Gm,2 Gb,2 Gbyte.
Быстрые операторы (настройка)
При включённой настройке Quick operators четыре буквы действуют как операторы только между двумя цифрами — внутри идентификаторов они не работают:
| Буква | Оператор |
|---|---|
p | + |
m | − |
x | × |
d | ÷ |
Литерал 0x… никогда не превращается в умножение.
Целочисленные базы (точные)
Radix-литералы используют строгий префикс; регистр префикса не важен (0X, 0B, 0O
работают):
| Префикс | База | Цифры |
|---|---|---|
0x | 16 | 0-9 A-F |
0b | 2 | 0 1 |
0o | 8 | 0-7 |
Правила:
- Подчёркивания только между двумя цифрами:
0x1_0,100_000. Двойные подчёркивания, подчёркивания по краям или сразу после префикса — ошибки (0x_1F,0x1F_). - Знаково-модульная запись:
-0x10= −16. Модуль литерала ограничен0x7FFFFFFFFFFFFFFF(9223372036854775807) в любой базе:-0x7FFFFFFFFFFFFFFFпринимается, а-0x8000000000000000и0x8000000000000000выходят за максимум точных целых и являются ошибками. Переполнение цифры (0x10000000000000000) — тоже ошибка. - Отображение: неотрицательные результаты отображаются в базе выражения
(
0x1F + 1→0x20). Отрицательные результаты и операции за пределами точных целых (деление с остатком,^с отрицательным показателем) отображаются в десятичной (-0x10→ −16). - Обычные цепочки десятичных цифр не являются точными целыми.
9223372036854775808превращается в9.22e18. Точные целые применяются только к литералам с базой, функциямint/bin/oct/hexи фразамas/in/to base.
Базовые имена и фразы
Базовые имена не зависят от регистра:
| Имя | База |
|---|---|
decimal, base10 | 10 |
binary, base2 | 2 |
octal, base8 | 8 |
hex, hexadecimal, base16 | 16 |
base 2 / base 8 / base 10 / base 16 (целое через пробел) | 2 / 8 / 10 / 16 |
<expr> as <base name> 255 as hex → 0xFF
<expr> in <base name> 99 in binary → 0b1100011
<expr> to base 8 64 to base 8 → 0o100
Побитовые операции
Режим точных целых включается литералами 0x/0b/0o, вызовами
int(/bin(/oct(/hex(, фразами … as|in <base> и … to base N, а также
побитовыми глифами & | << >> или словом xor (глифы считаются только когда в
строке есть математическое содержимое — fish & chips остаётся прозой). Слова
and/or работают как побитовые, только когда обе стороны — целые.
| Операция | Смысл | Примечания |
|---|---|---|
& | побитовое И | |
| | побитовое ИЛИ | глиф всегда побитовый: логические операнды — ошибка (false | (1/0 > 0)) |
xor | побитовое исключающее ИЛИ (слово) | 6 xor 3 = 5 |
<< | сдвиг влево | сдвиг 0…63; переполнение — ошибка |
>> | сдвиг вправо | сдвиг 0…63; арифметический для отрицательных |
/ | целочисленное деление | результат — обычное число при наличии остатка |
% | остаток | |
^ | степень | показатель проверяется; отрицательный показатель даёт обычное число |
Все значения здесь — точные целые: 0x7FFFFFFFFFFFFFFF =
9223372036854775807, а переполнение — видимая ошибка: никогда не «обёртка» и не тихо
округлённое число. Слова and/or/xor контекстны: два целых делают их побитовыми, два
логических делают and/or логическими, а смешение типов в одном операторе — строгая
ошибка. Используйте явные скобки на границах.
Полный приоритет операторов описан в операторах и логике.
Проверенные примеры
0x1F + 1 → 0x20
0x1F in decimal → 31
0b101101 + 1 → 0b101110
0o55 + 1 → 0o56
0x1_0 → 0x10
100_000 as hex → 0x186A0
256 as hex → 0x100
16 in binary → 0b10000
-0x10 → -16
1 << 4 → 16
32 >> 2 → 8
0xFF & 0x0F → 0x0F
5 | 2 → 7
6 xor 3 → 5
5 << 3 → 40
(5 << 3) / 2 → 20
x = 0x1F
x & 1 → 1
x + 1 → 0x20
x as hex → 0x1F
Последние четыре строки выполняются на одном листе, где x объявлена один раз.
Связанные разделы
- Операторы и логика — приоритет и полные таблицы точных целых.
- Встроенные функции —
int,bin,oct,hexи остальные 19 функций. - Токены ответов — как radix-представление переживает токенизацию.