今回は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. |
COMP | 2進数データ | 01 C PIC S9(3) COMP. |
パック10進数(COMP-3)とゾーン10進数との比較
数値型を定義する際にCOMP-3を指定するメリットは、通常よりもデータを効率的に扱うことができるようになる点です。
なお、数値型を定義する際になにも指定しないとゾーン10進数で定義され、COMP-3で定義するとパック10進数で定義されることとなります。
図で解説すると以下のようになります。
![](https://www.shakaijintanaka.com/wp-content/uploads/2023/04/110e22f03ed0c729f95a3119998014bb-1024x349.png)
上の図で見てわかるように、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を使用することができます。