Lispリーダーは、整数を、任意の先頭符号と任意の末尾ピリオドを伴う、空でない10進数字の列として読み込みます。
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.
10進法以外の進数における整数の構文は、‘#’に続き、進数指定、そして1つ以上の数字で構成されます。進数指定は、2進数では‘b’、8進数では‘o’、16進数では‘x’、進数radixでは‘radixr’となります。したがって、‘#binteger’は2進数ではintegerと読み替えられ、‘#radixrinteger’は進数radixではintegerと読み替えられます。radixの許容値は2から36までであり、許容される数字は‘0–‘9’、‘A–‘Z’から順に取られる最初のradix文字です。大文字と小文字は区別されず、先頭の符号や末尾のピリオドはありません。例えば:
#b101100 ⇒ 44 #o54 ⇒ 44 #x2c ⇒ 44 #24r1k ⇒ 44
整数に対する各種関数、特にビット演算子(整数のビット演算を参照)の動作を理解するには、数値を2進数形式で捉えることがしばしば有用です。
2進数では、10進数の整数5は次のようになります。
...000101
(省略記号「…」は、先頭ビットに一致する概念上の無限個のビットを表しており、ここでは無限個の0ビットを指します。以降の例でも、この「…」という表記を用います。)
整数 −1 は次のようになります。
...111111
−1はすべて1で表される。(これは2の補数表記と呼ばれる。)
−1から4を引くと、負の整数−5が得られます。2進数では、10進数の整数4は100となります。したがって、−5は次のようになります。
...111011
本章で説明する関数の多くは、数値の代わりに引数としてマーカーを受け付けます。(マーカーを参照してください。)こうした関数の実際の引数は数値またはマーカーのいずれかになり得るため、これらの引数にはしばしば number-or-marker という名前を付けます。引数の値がマーカーである場合は、その位置値が使用され、バッファは無視されます。
Emacs Lispでは、テキスト文字は整数で表現されます。0から(max-char)の値まで(両端を含む)の任意の整数は、文字として有効とみなされます。文字コードを参照してください。
Emacs Lispの整数は、マシンワードサイズに制限されません。しかし内部的には、fixnumsと呼ばれる小さい整数と、bignumsと呼ばれる大きい整数の2種類が存在します。通常、Emacs
Lispのコードは整数がfixnumかbignumかに依存すべきではありませんが、古いバージョンのEmacsではfixnumのみがサポートされており、Emacsの一部の関数では依然としてfixnumしか受け付けず、また古いEmacs
Lispのコードはbignumが渡されると問題が発生する場合があります。例えば、古いEmacs Lispのコードではeqを用いて整数の数値的な等価性を安全に比較できましたが、bignumが存在するため、現在は整数の比較にeqlや=のような等価判定式を使用する必要があります。
ビッグナンバーの値の範囲は、メインメモリの容量、ビッグナンバーの指数を表現するために使用されるワードサイズなどのマシン特性、およびinteger-width変数によって制限されます。これらの制限は、通常、フィックスナンバーの制限よりもはるかに緩やかです。ビッグナンバーがフィックスナンバーと数値的に等しくなることはありません。Emacsは、フィックスナンバーの範囲内の整数を常にビッグナンバーではなく、フィックスナンバーとして表現します。
fixnumの値の範囲はマシンによって異なります。最小範囲は−536,870,912から536,870,911まで(30ビット、すなわち−2**29から2**29 − 1)ですが、多くのマシンではより広い範囲が提供されています。
この変数の値は、Emacs Lispが扱える最大の「小さい」整数です。代表的な値は、32ビットプラットフォームでは 2**29 − 1、64ビットプラットフォームでは 2**61 − 1 です。
この変数の値は、Emacs Lispが扱える数値的に最小の「小さい」整数です。値は負となります。代表的な値は、32ビットプラットフォームでは −2**29、64ビットプラットフォームでは −2**61 です。
この変数の値は非負の整数であり、大きな整数が計算される際にEmacsが範囲エラーを通知するかどうかを制御します。絶対値が 2**n(ここで n はこの変数の値)未満の整数については、範囲エラーは通知されません。より大きな整数を作成しようとする場合は通常、範囲エラーが通知されますが、より大きな整数を低コストで作成できる場合は、通知されないこともあります。計算で巨大な整数が生成される場合、この変数に大きな値を設定するとコストが高くなる可能性があります。