COBOLのCOMP3とCOMPとは何か解説

COBOLのCOMP3について解説アイキャッチ

今回はCOBOLのデータ型であるCOMP-3とCOMPについてゆるっと解説します。

COBOLのデータ型には、文字列や数値、日付など様々な種類がありますが、その中でもCOMP-3は数値型の一種であり、コンピュータのメモリ上で効率的にデータを格納することができるため、COBOLのプログラムでよく使用されます。

しかし、そのデータ形式が独特であるため、初めて使う人にとっては理解が難しいことがあります。
そこで、今回は、COMP-3とCOMPというデータ型について、具体的な使い方や注意点などを紹介することで、初心者でも理解しやすくなるように解説します。

COMP-3(パック10進数)とCOMPとゾーン10進数とは??

COMP-3とCOMPは数値型の一種です。また、COMP-3と「PACKED-DECIMAL」は同義ですので、「PACKED-DECIMAL」を指定することもできます。

下記表にまとめた通り、「COMP-3」を指定するとパック10進数データというデータ形式で定義されます。また、「COMP」で指定すると2進数データのデータ形式で定義されます。何も指定しない場合又は「DISPLAY」を指定するとゾーン10進数というデータ形式で定義されることとなります。

データ属性使用方法
何も指定しない
又は
DISPLAY
ゾーン10進数データ01 A PIC S9(3).
又は
01 A PIC S9(3) DISPLAY.
COMP-3
又は
PACKED-DECIMAL
パック10進数データ01 B PIC S9(3) COMP-3.
又は
01 B PIC S9(3) PACKED-DECIMAL.
COMP2進数データ01 C PIC S9(3) COMP.
データ形式

パック10進数(COMP-3)とゾーン10進数との比較

数値型を定義する際にCOMP-3を指定するメリットは、通常よりもデータを効率的に扱うことができるようになる点です。
なお、数値型を定義する際になにも指定しないとゾーン10進数で定義され、COMP-3で定義するとパック10進数で定義されることとなります。

図で解説すると以下のようになります。

パック10進数とゾーン10進数の比較

上の図で見てわかるように、COMP-3のパック10進数データについては1バイト(8ビット)に2桁の数字を記録します。何も指定しない場合のゾーン10進数では1バイトに1桁の数字を記憶します。

つまり、パック10進数で「−123」を保持する場合とゾーン10進数で「−123」を保持するのでは、使用するデータ量が違うのが理解できるできるでしょう。
つまり、パック10進数の方が数値型データを効率的に保持することができるので、計算時の使用に適しています。

なお、上の図のピンク背景部分が数値部、緑色背景部分が符号部となっています。
符号部ではパック10進数は「0011」がプラス、「0111」だとマイナスということになります。ゾーン10進数は「1100」がプラス、「1101」がマイナスということになります。今回は両方とも符号はマイナスで保持しています。

COMP3の使用方法

続いて、COMP-3の使用方法について解説します。

COMP-3はデータ部で定義することで使用することができます。
下記使用例となります。

*> DENTIFICATION DIVISIONでは、プログラムの名前を記述するところ。
IDENTIFICATION DIVISION.
PROGRAM-ID. TEST-COMP.

ENVIRONMENT DIVISION.
DATA DIVISION.
    WORKING-STORAGE SECTION.
    
    01 A PIC S999 COMP-3. // ここでCOMP-3を定義する

*> PROCEDURE DIVISIONでは、プログラムが行う処理を書いていく。
PROCEDURE DIVISION.
    MAIN SECTION.
    
        DISPLAY A.
        
        MOVE -908 TO A.
        
        DISPLAY A.  // -908


*> プログラム終了!!お疲れ様でした。
    STOP RUN.

上記のように定義することで、COMP-3を使用することができます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA