型を指定するsuffix (b, s, l, ll
) を付加しない場合、Integer とみなされる。Integerの範囲に収まらないときは Long や 64-bit Long となる。ただし、COMPILE_OPT IDL2
または COMPILE_OPT DEFINT32
を指定している場合には、最低でも Long になる。
型 | 表記できる絶対値の最大 | 10進表記 | 16進表記 (従来) | 16進表記 (IDL 8.6.1以降) | 8進表記 (従来) (注3) | 8進表記 (IDL 8.9以降) | 2進表記 (IDL 8.9以降) |
---|---|---|---|---|---|---|---|
Byte | 255 | 123b |
'7b'xb |
- |
'173'ob, "173b |
0o173b |
0b1111011b |
Integer (注2) | 32767 (注1) | 123s, 123 |
'7b'xs, '7b'x |
0x7bs, 0x7b |
'173'os, "173s, '173'o, "173 |
0o173s, 0o173 |
0b1111011s, 0b1111011 |
Unsigned Integer (注2) | 65535 | 123us |
'7b'xus, '7b'xu |
0x7bus, 0x7bu |
'173'ous, "173us, '173'ou, "173u |
0o173u |
0b1111011u |
Long (注2) | 231-1 (注1) | 123l |
'7b'xl |
0x7bxl |
'173'ol, "173l |
0o173l |
0b1111011l |
Unsigned Long (注2) | 232-1 | 123ul |
'7b'xul |
0x7bul |
'173'oul, "173ul |
0o173ul |
0b1111011ul |
64-bit Long | 263-1 (注1) | 123ll |
'7b'xll |
0x7bll |
'173'oll, "173ll |
0o173ll |
0b1111011ll |
Unsigned 64-bit Long | 264-1 | 123ull |
'7b'xull |
0x7bull |
'173'oull, "173ull |
0o173ull |
0b1111011ull |
注1: Integer型のリテラルが表現できる範囲は-32767~32767 であり -32768 は含まれない。Integer型変数に格納できる範囲とは異なる。-32768
と表記すると Long 型になってしまう。Integer 型の -32768 を得るには、-32767 - 1
とか、'8000'xs
と表記する。Long および 64-bit Long でも同様。
注2: COMPILE_OPT IDL2
または COMPILE_OPT DEFINT32
を指定している場合には、型suffixを指定しない整数は32-bit(Long または Unsigned Long)以上になる。
注3: ダブルクォーテーション用いた8進表記(例: "77
)は文字列と紛らわしいので避けるのが無難。
Fortranと似ている。
整数.整数E指数
各部分は省略可能。例えば、1.、1E、1E0、1.E、は全て1.0に等しい。デフォルトの型は 32-bit FLOATとなる。64-bit Double型にするには、E を D にかえる。
IDL 8.9以降で、COMPILE_OPT IDL3
または COMPILE_OPT FLOAT64
を指定している場合には、型を明示的に指定しない浮動小数点定数は64-bit Double (倍精度) になる。
1E または 1Dのように指数部を省略するとき、あるいは 1E+23 のように指数部に正の符号を使うときは、EまたはD直後のスペースの有無で意味が変わってしまうので注意。1E+23
は 1023 を意味するが、1E + 23
は加算とみなされ 24.0 となる。
複素数定数は実部と虚部から構成される。実部と虚部は両方とも単精度または倍精度浮動小数点数である。複素数定数は complex
(単精度) または dcomplex
(倍精度) 関数で与える。
complex(Real_Part, Imaginary_Part)
complex(Real_Part) ; 虚部が0の複素数
IDL 8.9からは型suffix i
または j
を使うことで、次のように表記することもできる。
1 + 2i
3i ; 虚部が0の複素数
4di ; 倍精度
IDL 8.4以降では BigInteger
クラスを用いることで多倍長整数を表記できる。
a = BigInteger(123456)
b = BigInteger('12345678901234567890')
c = BigInteger('123456789abcdef', radix=16) ; 16進表記
d = BigInteger('0x123456789abcdef') ; IDL 8.9以降
文字列定数は、シングルクオート(')またはダブルクオート(")で囲まれた、0文字以上の文字列からなる。IDL 8.6以前では、ダブルクオートの直後に数字がくると、8進数として解釈しようとしてエラーとなる。
print,'abc' ; abc が表示される
print,"abc" ; abc が表示される
print,"1abc" ; IDL8.6以前ではエラー (IDL 8.6.1以降ではOK)
文字列中にクオートを含めるには、クオートを2つ続けるか、別の種類のクオートで囲む。
print,'Don''t' ; Don't が表示される
print,"Don't" ; Don't が表示される
print,"Don''t" ; Don''t が表示される
string
関数を使うことで、ASCIIコードで 0x00~0x1F と 0x7F に割り当てられている制御文字を表現することが出来る。たとえば、string(27b)
はANSIエスケープコードを表す。制御文字をコンソールに表示したときの効果は入出力を参照。
!NULL
は未定義の変数(またはnull pointerやnull object)と等価のシステム定数。IDL8で導入された。空の配列 [] や空の構造体 {} も !NULL と等価。ある変数が存在するかどうかを調べるには !NULL
と比較する。またある変数を削除しその変数が使用していた記憶域を解放するときは !NULL
を代入する。関数の戻り値が不要な時に !NULL
に代入するという使い方もできる。
a=1
print, a ne !null ? 'defined' : 'undefined' ; defined が表示される
a=!null
print, a ne !null ? 'defined' : 'undefined' ; undefined が表示される
print, n_elements(a) ; 0 が表示される
print,[] eq !null, {} eq !null ; 1 1 が表示される (空の配列・構造体と等価)
!null = where(indgen(10) gt 3, count) ; countには6が入る
[] = where(indgen(10) gt 3, count) ; !null は [] と等価なのでこのような書き方もできる