概要 - 整数(AutoLISP)

整数は端数のない、小数点を含まない数です。

AutoLISP の整数は、32 ビットの符号付き整数で、範囲は +2,147,483,647 から -2,147,483,648 までです。一部の関数は、+32767 から -32678 までの 16 ビット整数のみを受け入れます。整数を明示的に使用すると、その値は定数として認識されます。2、-56、1,200、196 などは有効な整数です。

整数の最大範囲を超える数値を入力すると(整数オーバーフローが発生し)、AutoLISP は整数を実数に変換します。しかし、2 つの有効な整数に対して算術演算を実行し、その結果が整数の最大範囲を超えた場合、結果として得られた数値は無効になります。

次の例は、AutoLISP がどのように整数オーバーフローを処理するかを示しています。

正の最大整数値を入力すると、入力した値は保持されます。

(setq int1 2147483647)
2147483647

指定可能な最大値よりも大きい整数値を入力すると、その値は実数として返されます。

(setq int2 2147483648)
2.14748e+009

算術演算で 2 つの有効な整数を指定できますが、その結果として整数オーバーフローが発生すると、結果は間違ったものになります。

(setq int3 (+ 2147483646 3))
-2147483647

上記の例では、2 つの正の数値を加算することにより負の数値が得られたため、結果は明らかに間違っています。しかし、次の演算を実行すると正しい結果が得られることに注目してください。

(setq int4 (+ 2147483648 2))
2.14748e+009

この場合、AutoLISP は 2147483648 を有効な実数に変換してから、その数値に 2 を加算します。その結果は、有効な実数になります。負の最大整数値を入力すると、入力した値は保持されます。

(setq int5 -2147483647)
-2147483647

指定可能な負の最大値よりも大きい負の整数を入力すると、その値は実数として返されます。

(setq int6 -2147483648)
-2.14748e+009

次の演算は、AutoLISP がまず最初にオーバーフローしている負の整数を有効な実数に変換するため、正しく実行されます。

(setq int7 (- -2147483648 1))
-2.14748e+009