Next: , Previous: Numbers, Up: Numbers


3.1 整数の基本

整数の値の範囲は計算機に依存します。 最小の範囲は、−134217728から134217727まで(28ビット長、つまり から これより広い範囲を扱える計算機もあります。 本章の多くの例題では、整数は28長ビットであると仮定します。 Lispリーダは、 先頭に符号があってもよく、最後にピリオドがあってもよい、 数字の列として整数を読み取ります。

     
     
     
     
     
     
     
      1               ; 整数1
      1.              ; 整数1
     +1               ; これも整数1
     -1               ; 整数−1
      268435457       ; 桁溢れのため、これも整数1
      0               ; 整数0
     -0               ; 整数0

整数を扱うさまざまな関数を理解するには、 特にビット演算(see Bitwise Operations)を理解するには、 数を2進表現で考えるとよいです。

28ビット長の2進表現では、10進整数5はつぎのようになります。

     0000  0000 0000  0000 0000  0000 0101

(4ビットのまとまりごとに空白を1個、 8ビットのまとまりごとに空白を2個挿入して、読みやすくする。)

整数−1はつぎのようになります。

     1111  1111 1111  1111 1111  1111 1111

−1は、28個の1で表現されます。 (これを2の補数(two's complement)表記と呼ぶ。)

負の数−5は、−1から4を引いて作れます。 10進数4は、2進表記では100です。 したがって、−5は、つぎのようになります。

     1111  1111 1111  1111 1111  1111 1011

この実装では、28ビット長の2進整数の最大値は、 10進で134,217,727になります。 2進表記では、つぎのようになります。

     0111  1111 1111  1111 1111  1111 1111

算術関数は、整数がその範囲外に出たかどうか検査しないので、 134,217,727に1を足すと、値は負の数−134,217,728になります。

     (+ 1 134217727)
          ⇒ -134217728
          ⇒ 1000  0000 0000  0000 0000  0000 0000

本章で述べる多くの関数は、数の引数としてマーカを受け付けます。 (see Markers)。 そのような関数の実際の引数は数かマーカであるので、 それらの引数をしばしばnumber-or-markerという名前で書きます。 引数の値がマーカであるときには、その位置の値を使いバッファは無視します。