COBOL2002 言語 拡張仕様編


25.6.2 COMP-X項目

COMP-X項目は,符号なし2進項目を扱うものであり,2進項目(BINARY項目)が書けるところならば,COMP-X項目を書ける。ただし,機能によってはCOMP-X項目を2進項目として扱う場合がある(「25.6.2 COMP-X項目」の「(6) COMP-X項目が2進項目として扱われる個所」参照)。

〈この項の構成〉

(1) 割り当てられる記憶域

COMP-X項目に対するPICTURE文字列中の記号('9','A'および'X')の個数とその項目に割り当てられる記憶域のサイズの規則に従う。その規則を次に示す。

なお,COMP-X項目は,-Bin1Byteオプション(1バイト2進機能)指定の有無の影響を受けない。

PICTURE記号が'9'の場合

PICTURE記号が'A'または'X'の場合

PICTURE句の'9'の個数

割り当てられる記憶域のバイト数

PICTURE句の'A'や'X'の個数

割り当てられる記憶域のバイト数

仮定される'9'の個数

1〜 2

1

1

1

2

3〜 4

2

2

2

4

5〜 9

4

4

4

9

10〜18

8

8

8

18

(2) 格納できる数値

格納できる数値は,割り当てられた記憶域に収まる2進数の最大値が限度となる。

なお,COMP-X項目は,-DigitsTruncオプション(2進項目のけた落とし)の影響を受けない。

(3) 記憶方式

2進データ項目と同じ記憶方式に従って記憶される。システムのバイナリ形式のデータがリトルエンディアンの場合,-BigEndian,Binオプションの有無によって記憶方式を切り替える。

-BigEndian,Binオプションあり:ビッグエンディアン形式で記憶。

-BigEndian,Binオプションなし:リトルエンディアン形式で記憶。

-BigEndian,Binオプションについては,マニュアル「COBOL2002 ユーザーズガイド」またはマニュアル「COBOL2002 使用の手引 手引編」のコンパイラオプションを参照のこと。

(4) データ部

【標準仕様との関連】

COBOL2002 言語 標準仕様編」 「9 データ部(DATA DIVISION)

(a) PICTURE句(COMP-X項目)

一般規則

  1. PICTURE文字列を構成する記号は,'9','X','A'でなければならない。

  2. 'X'と'A'は同じ意味として扱う。

  3. PICTURE文字列中に記号の混在を許し,記号が'X'だけから成る文字列と同様に扱う。

  4. PICTURE文字列が記号'9'だけから成る場合,1〜18けたでなければならない。

  5. PICTURE文字列中の記号がすべて'X','A'またはPICTURE記号が混在する場合,PICTURE文字列中の記号の個数は1,2,4,8個でなければならない。

  6. PICTURE文字列が記号'X',記号'A'から成る場合,割り当てられる記憶域と同じバイト数になるように記号'9'が指定されたものとしてけた数を決める。その規則を次に示す。

    'A','X'の個数

    バイト数

    仮定される'9'の数

    1

    1

    2

    2

    2

    4

    4

    4

    9

    8

    8

    18

【標準仕様との関連】

COBOL2002 言語 標準仕様編」 「9.16.54 PICTURE句

(b) SYNCHRONIZED句(COMP-X項目)

COMP-X項目は,SYNCHRONIZED句の影響を受けないため,直前の項目に続けて配置される。

【標準仕様との関連】

COBOL2002 言語 標準仕様編」 「9.16.80 SYNCHRONIZED句

(c) USAGE句(COMP-X項目)

形式

[図データ]

構文規則

  1. COMPUTATIONAL-XとCOMP-Xは同義語であり,どちらを書いてもよい。

  2. 基本項目のPICTURE句は,それが属する集団項目のUSAGE句と矛盾してはならない。

  3. 集団項目のUSAGE句にCOMP-Xを書いた場合,その集団項目に従属する基本項目または集団項目のデータ記述項中にUSAGE句を書くときは,COMP-Xでなければならない。

一般規則
  1. 集団項目にCOMP-Xを書くと,その句は集団に従属する基本項目に適用される。

【標準仕様との関連】

COBOL2002 言語 標準仕様編」 「9.16.86 USAGE句

(d) VALUE句(COMP-X項目)

構文規則

  1. 定数は符号があってはならない。

  2. 定数は小数けたがあってはならない。

  3. 定数はデータ項目内に収まるものでなければならず,ゼロ以外の切り捨てを引き起こしてはならない。

【標準仕様との関連】

COBOL2002 言語 標準仕様編」 「9.16.88 VALUE句

(5) 手続き部

【標準仕様との関連】

COBOL2002 言語 標準仕様編」 「10 手続き部(PROCEDURE DIVISION)

(a) 転記の規則

・COMP-X項目からCOMP-X項目へ転記するときの規則

送り出し側作用対象の2進値がそのまま受け取り側作用対象に格納される。その場合,送り出し側作用対象の2進値が受け取り側作用対象に収まらないときは,受け取り側作用対象の範囲外となる送り出し側作用対象の2進上位けたを切り捨てる。

(例1)

       01 A PIC 9(9) COMP-X VALUE 65538. …(1)
       01 B PIC 9(4) COMP-X. …(2)
           MOVE A TO B. …(3)

(1)は4バイト(00010002)16である。

(2)は2バイトである。

(3)のBには(0002)16が入る。

・COMP-X項目以外の項目からCOMP-X項目へ転記するときの規則
・字類が数字となる項目からCOMP-X項目へ転記するときの規則

字類が数字となる項目からCOMP-X項目へ転記するときは,送り出し側作用対象の整数部の値を受け取り側作用対象と同じサイズの符号ありの2進値に変換した値を符号ビットも数値の一部として受け取り側作用対象に格納する。

送り出し側作用対象の2進値が受け取り側作用対象と同じサイズの符号ありの2進領域に収まらないときは,2進上位けたを切り捨てた値を受け取り側作用対象に格納する。

(例2)

       01 A PIC 99V99 VALUE 12.34.
       01 B PIC 9(5) VALUE 65537.
       01 C PIC 9(4) COMP-X.
           MOVE A TO C. …(1)
           MOVE B TO C. …(2)

(1)のCには(000C)16が入る。

(2)のCには(0001)16が入る。

・字類が英数字となる項目からCOMP-X項目へ転記するときの規則
  1. 集団項目からCOMP-X項目へ転記するときは,送り出し側作用対象の左端バイトが受け取り側作用対象の左端バイトに格納され,送り出し側作用対象の右端バイトまで繰り返される。

    送り出し側作用対象が受け取り側作用対象より大きいときは,格納できない部分を切り捨てる。また,送り出し側作用対象が受け取り側作用対象より小さいときは,空白が受け取り側作用対象に格納される。

  2. 英数字項目からCOMP-X項目へ転記するときは,英数字項目から10進値を作り,その10進値を字類が数字となる項目からCOMP-X項目へ転記するときの規則に従って受け取り側作用対象に格納する。

  3. 数字編集項目からCOMP-X項目へ転記するときは,数字編集項目の値は一時的に外部10進項目に転記され,その外部10進項目からCOMP-X項目から字類が数字となる項目からCOMP-X項目へ転記するときの規則に従ってCOMP-X項目に格納される。

・COMP-X項目からCOMP-X項目以外の項目へ転記するときの規則

COMP-X項目からCOMP-X項目以外の項目へ転記するときは,COMP-X項目の値を受け取り側作用対象の属性に合わせて格納する。そのとき,小数点の位置あわせおよび必要なゼロ詰めが標準けた寄せ規則に従って行われる。

(例3)

       01 A PIC 9(4) COMP-X VALUE 65535.
       01 B PIC 9(4) COMP.
       01 C PIC 9(4).
           MOVE A TO B. …(1)
           MOVE A TO C. …(2)

(1)のBには-DigitsTruncオプション指定がないときは-1が入り,-DigitsTruncオプション指定があるときは5535が入る。

(2)のCには5535が入る。

【標準仕様との関連】

COBOL2002 言語 標準仕様編」 「10.5.7 データ項目内でのデータのけた寄せ

(b) 転記の組み合わせ

COMP-X項目の転記できる組み合わせは,2進項目の転記の組み合わせと同じとする。

(c) ON SIZE ERROR指定(COMP-X項目)

該当する項目が算術演算の受け取り側作用対象のときに,その文の中にON SIZE ERRORまたはNOT ON SIZE ERROR指定が含まれるとき,PICTURE文字列の'9'の数によって,けたあふれ条件が生じたかどうかが判定される。けたあふれが発生しないときだけ,演算結果が受け取り側作用対象に収められる。

ON SIZE ERRORまたはNOT ON SIZE ERROR指定が含まれない場合,受け取り側作用対象の項目の範囲外になる2進上位けたを切り捨てて格納される。

(d) 演算の中間結果

  • 演算式中のCOMP-X項目

    COMP-X項目が演算式中にあるときは,2進項目に拡張して演算する。2進項目に拡張するときの規則を次に示す。

    COMP-X項目のけた数

    2進項目のけた数

    1〜 2

    3

    3〜 4

    5

    5〜 9

    10

    10〜18

    20

  • 中間結果のけた数

    演算式中にCOMP-X項目を含むときは,COMP-X項目を(a)の規則に従って符号付きの2進項目に拡張したけた数を使用して中間結果のけた数を求める。

  • 中間結果が30けたを超えたときの補正値

    演算式中にCOMP-X項目を含むときに中間結果が30けたを超えたときは,COMP-X項目を(a)の規則に従って,符号付きの2進項目に拡張したけた数を使用して30けたを超えたときの補正値を計算する。

(e) 比較条件

  • 数字作用対象の比較

    COMP-X項目と数字項目を比較するときは,COMP-X項目を符号付きの2進項目に拡張して数字比較をする。2進項目に拡張するときの規則については,「(d) 演算の中間結果」を参照のこと。

  • 文字作用対象の比較

    COMP-X項目と集団項目を比較するときは,文字比較をする。

(f) 比較の組み合わせ

COMP-Xの比較の組み合わせは,2進項目の比較の組み合わせと同じとする。

(g) DISPLAY文(COMP-X項目)

DISPLAY文のデータ項目(作用対象)とハードウェア装置の間のデータ変換の規則を次に示す。

作用対象

データ変換

項目のサイズ

COMP-X項目

LEADING SEPARATE指定の外部10進項目に変換。

割り当てられる記憶域に格納できるけた数を持つLEADING SEPARATE指定の外部10進項目のサイズ。ただし,8バイトのCOMP-Xのときは18けたとする。

(6) COMP-X項目が2進項目として扱われる個所

次に示す個所にCOMP-X項目を指定した場合,2進項目として扱われる。

(7) 整列併合機能とCOMP-X項目

(8) データベースアクセス機能とCOMP-X項目

埋め込み変数のデータ項目にCOMP-X項目を書いたときは,そのまま符号なしデータとして扱う。

(9) 索引ファイルとCOMP-X項目

索引ファイルの主レコードキーと副レコードキーおよび合成キーを構成するデータ項目にCOMP-X項目を書くときは,2,4バイトのCOMP-X項目でなければならない。