Spec-Zone.ru › Elisp

Основы работы с целыми числами

Считыватель Lisp считывает целое число как непустую последовательность десятичных цифр с необязательным начальным знаком и необязательной конечной точкой.

 1               ; The integer 1.
 1.              ; The integer 1.
+1               ; Also the integer 1.
-1               ; The integer −1.
 0               ; The integer 0.
-0               ; The integer 0.

Синтаксис целых чисел в системах счисления, отличных от десятичной, состоит из «#», за которым следует обозначение основания, а затем одна или несколько цифр. Обозначения основания: «b» для двоичной системы, «o» для восьмеричной, «x» для шестнадцатеричной и «radixr» для системы счисления с основанием radix. Таким образом, «#binteger» считывает integer как двоичное число, а «#radixrinteger» считывает integer в системе счисления с основанием radix. Допустимые значения radix — от 2 до 36, а допустимыми цифрами являются первые radix символов из диапазонов «0»–«9» и «A»–«Z». Регистр букв не учитывается, начальный знак и конечная точка не допускаются. Например:

#b101100 ⇒ 44
#o54 ⇒ 44
#x2c ⇒ 44
#24r1k ⇒ 44

Чтобы понять, как различные функции работают с целыми числами, особенно побитовые операторы (см. Побитовые операции над целыми числами), часто бывает полезно рассмотреть числа в двоичной форме.

В двоичной системе десятичное целое число 5 выглядит так:

...000101

(Многоточие «…» обозначает концептуально бесконечное число битов, совпадающих со старшим битом; в данном случае — бесконечное число нулевых битов. В следующих примерах также используется это обозначение «…».)

Целое число −1 выглядит так:

...111111

−1 представлено одними единицами. (Это называется представлением в дополнительном коде.)

Вычитание 4 из −1 даёт отрицательное целое число −5. В двоичной системе десятичное целое число 4 записывается как 100. Следовательно, −5 выглядит так:

...111011

Многие функции, описанные в этой главе, принимают маркеры вместо чисел в качестве аргументов. (См. Маркеры.) Поскольку аргументами таких функций могут быть как числа, так и маркеры, мы часто называем эти аргументы number-or-marker. Если значение аргумента является маркером, используется его позиция, а его буфер игнорируется.

В Emacs Lisp текстовые символы представлены целыми числами. Любое целое число от нуля до значения (max-char) включительно считается допустимым значением символа. См. Коды символов.

Размер целых чисел в Emacs Lisp не ограничен размером машинного слова. Однако на низком уровне существуют два вида целых чисел: меньшие, называемые фиксну́мами, и большие, называемые бигну́мами. Хотя обычно код Emacs Lisp не должен зависеть от того, является ли целое число фикснумом или бигнумом, старые версии Emacs поддерживают только фикснумы, некоторые функции Emacs по-прежнему принимают только фикснумы, а старый код Emacs Lisp может работать некорректно при передаче ему бигнумов. Например, если старый код Emacs Lisp мог безопасно сравнивать целые числа на числовое равенство с помощью eq, то из-за наличия бигнумов для сравнения целых чисел теперь следует использовать предикаты равенства, такие как eql и =.

Диапазон значений бигнумов ограничен объёмом оперативной памяти, характеристиками машины, такими как размер слова, используемого для представления показателя степени бигнума, и переменной integer-width. Обычно эти ограничения значительно менее строгие, чем ограничения для фикснумов. Бигнум никогда не бывает численно равен фикснуму; Emacs всегда представляет целое число, попадающее в диапазон фикснумов, как фикснум, а не как бигнум.

Диапазон значений фикснума зависит от машины. Минимальный диапазон — от −536,870,912 до 536,870,911 (30 бит; то есть от −2**29 до 2**29 − 1), однако многие машины поддерживают более широкий диапазон.

Переменная: most-positive-fixnum

Значение этой переменной — наибольшее «малое» целое число, которое может обрабатывать Emacs Lisp. Типичные значения: 2**29 − 1 на 32-разрядных и 2**61 − 1 на 64-разрядных платформах.

Переменная: most-negative-fixnum

Значение этой переменной — наименьшее в числовом смысле «малое» целое число, которое может обрабатывать Emacs Lisp. Оно отрицательное. Типичные значения: −2**29 на 32-разрядных и −2**61 на 64-разрядных платформах.

Переменная: integer-width

Значение этой переменной — неотрицательное целое число, которое определяет, будет ли Emacs сигнализировать об ошибке диапазона при вычислении большого целого числа. Для целых чисел с абсолютными значениями меньше 2**n, где n — значение этой переменной, ошибка диапазона не сигнализируется. Попытки создать более крупные целые числа обычно приводят к сигнализации об ошибке диапазона, хотя сигнал может не подаваться, если более крупное целое число можно создать без больших затрат. Установка большого значения этой переменной может быть затратной, если в ходе вычислений создаются огромные целые числа.

Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Integer-Basics.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API