数値リテラル

数値リテラルは、数字、プラス符号、マイナス符号、および小数点から選択される文字列です。

数値リテラルの書き方は、次の規則によって規定されています。

リテラルが数値リテラルの書き方の規則に従っているものの、引用符で囲まれている場合、それは文字リテラルです。

数値リテラルは、2 進 (バイナリ)、8 進、または 16 進表記でも指定できます。数値リテラルをこれらのいずれかの形式で指定するには、数値の前に次のいずれかのプレフィックスを付けます。

2 進 「B#」
8 進 「O#」
16 進 「X#」または「H#」

次に例を示します。

数字 2 進 8 進 16 進
3 B#11 O#3 X#3 または H#3
8 B#1000 O#10 X#8 または H#8
12 B#1100 O#14 X#C または H#C
128 B#10000000 O#200 X#80 または H#80
255 B#11111111 O#377 X#FF または H#FF

# の後の先行ゼロは無視されます。たとえば、X#00FF および X#FF は同じです。

コンパイラは、このようにして指定された各数値リテラルを、符号なしの Long 型整数に変換します。ほとんどの場合、これは 32 ビットの符号なしの数字であるため、この表記で指定できる数値リテラルの最大値は 4294967295、つまり (2**32) -1 です。

LENGTH OF

LENGTH OF 式は、添え字または参照修飾語として使用する場合を除き、数値リテラルを使用する任意の場合で使用できます。コンパイラは、数値リテラルを符号化した場合と同様にこの式を処理します。LENGTH OF 式は次のように記述します。

LENGTH OF data-name

data-name は、数値リテラル、文字リテラル、または任意のタイプのデータ項目の名前です。data-name が表項目を指す場合、添え字を含めることができます。コンパイラは、LENGTH OF 式の値を計算し、LENGTH OF で参照されるデータ項目またはリテラルが使用する現在の記憶域バイト数に相当する数値リテラルに置き換えます。次に例を示します。

77 my-item PIC x(10).
78 my-item-length value LENGTH OF my-item.

上記の式は次のようになります。

77 my-item PIC x(10).
78 my-item-length value 10.

LENGTH OF 式は、以下の例で示すように、手続き部でも使用できます。

01 my-data.
   03 my-table occurs 20 times.
      05 my-element-1 pic x(10).
   05 my-element-2 pic 99.

MOVE LENGTH OF my-element-1 TO data-size.
MOVE LENGTH OF my-table TO data-size.
MOVE LENGTH OF my-table(1) TO data-size.

この例では、コンパイラは最初の MOVE を MOVE 10 TO data-size として処理し、同様に 2 番目の MOVE を MOVE 240 TO data-size として、3 番目の MOVE を MOVE 12 TO data-size として処理します。

注: この式を表で使用する場合、ACUCOBOL-GT では、IBM Enterprise COBOL などの他の COBOL コンパイラとは動作が異なります。ACUCOBOL-GT は表全体のサイズを返しますが、IBM は表の 1 つの要素のサイズを返します。コンパイラの IBM 互換モードを有効にする -Cv を指定してプログラムをコンパイルすると、IBM の方式を使用できます。

浮動小数点リテラル

  1. 浮動小数点リテラルには、次のフォーマットがあります。
    [ + ] k.m { E } [ + ] n
    [ - ]     { e } [ - ]

    詳細は次のとおりです。

    • k.m は、1 桁以上の数字を表します。
    • n は、1 つ以上の桁を表します。
    • 小数点およびカンマの機能が DECIMAL IS COMMA によって切り替わった場合、k.mk,m になります。

    浮動小数点の数字の例を以下に示します。

    -12.345e12
    .0123E-6
    123.E1
  2. 手続き部の浮動小数点リテラルは、内部的には USAGE DOUBLE として保管されます。
  3. 浮動小数点値の有効範囲は、対象のマシンによって決まります。特定のマシンで範囲外のリテラルを表す場合、ランタイムは警告メッセージを報告し、最も近い境界値 (ゼロまたはそのマシンの最大浮動小数点値) を代入します。
  4. 一部のコンピューターでは、浮動小数点の計算で不正確な結果が生じる場合があります。これはハードウェアによる制限であり、一部の浮動小数点の値は、マシンによっては正確に表せない可能性があります。