COBOLデータ型について混乱しています。多くのインタビューのように、COMP-3とCOMPの違いを説明するように求められます...正確な違いは何ですか? COBOLでの使用モードの意味は何ですか、それはデータ型とどのように関連していますか?
よろしくお願いします、Manasi Kulkarni
COBOLのUSAGE
は、データ項目の使用方法を説明しています。 USAGEの例は次のとおりです。
PIC 9(5) USAGE DISPLAY
は、表示(印刷)できる5桁の番号を示します。しばしばUSAGE DISPLAY
が欠落している場合は暗黙的に含まれるため、省略されます。数値アイテムにはさまざまなタイプがあります。最も一般的に使用される2つの数値データ型は次のとおりです。
COMP(BINARY)データ項目は、通常、整数値を表すデータ項目に対して計算を実行する最も効率的な方法です。
IBM Enterprise COBOLの計算項目の完全なリストを見つけることができます---(here
多くのプログラマーがCOBOLを使い始めたときに抱える問題の1つは、COMPアイテムは計算に最適であるが、MOVEステートメントによってDISPLAYableアイテムに変換されるまで表示(印刷)できないことを理解することです。 COMPアイテムをレポートまたは画面に移動すると、うまく表示されません。最初にDISPLAYアイテムに移動する必要があります。
もう少し調べておきたいもう1つのことは、COBOLで変数を定義するときのPICtureとUSAGEの関係です。これは、リムリック大学の非常に優れた入門 COBOLチュートリアル へのリンクです。
COBOLには、実際には数値と文字列の2つのデータ型しかありません。
COBOLレコードの各フィールドのレイアウトは、PICTURE
(通常はPIC
と省略)句によって正確に指定されます。最も一般的なものは次のとおりです。
PIC X
_。 PIC X(100)
は100バイトの文字列を意味します。PIC 9
_、オプションでS
(符号)またはV
(暗黙の小数点)を使用。たとえば、PIC S9(7)V99
は、暗黙の小数点の左側に7桁、右側に2桁の符号付き数値を意味します。数値フィールドには、ストレージを最適化するためにUSAGE
句を含めることができます。最も一般的なUSAGE
sは、DISPLAY
、COMP
、および_COMP-3
_です。
DISPLAY
は、各桁を文字として格納します。たとえば、PIC 9(4) VALUE 123
は、数値を文字列「0123」であるかのように格納します。そしてPIC 9(4)V99 VALUE 123.45
は "012345"として保存します。小数点は実際には保存されないことに注意してください。
これは、各桁を表すのに8ビットを必要とするという点で非効率的な形式です。ただし、最後のバイトの半分を使用して符号を格納することにより、符号付き数値の「最適化」が行われます。通常、EBCDICの数字はすべてFの上位ニブルを持っているため、0123はF0 F1 F2 F3です。しかし、-0123はF0 F1 F2 D;です。 Dは負を示します。 Cは正を意味し、Fは符号なし(つまり、正)を意味します。 (類似のフォーマットがCOBOLのASCIIバージョンで使用されていますが、標準化されていません。)
_COMP-3
_は、末尾がニブルである2進化10進数です。 PIC 9(3) COMP-3 VALUE 123
は2バイト12 3Fになります。
COMP
またはBINARY
は、Cのshort
、int
、またはlong
と同様に、ネイティブのバイナリ形式です。
使用するデータ型の決定に関しては、非常に複雑にすることができます-しかし-簡単な一連のガイドラインは次のとおりです。
[〜#〜] display [〜#〜]およびEdited Zone Decimalは、レポートまたはSYSOUTで数値を表示するためにのみ使用する必要があります。 COMPおよびCOMP-3フィールドをDISPLAY/Editedフィールドに移動してから、レポートまたはsysoutに配置してください。
[〜#〜] comp [〜#〜]-integersの計算速度が最も速い
COMP-(PACKED Decimal)-decimal positionを維持する必要がある場合に使用します。
COMPおよびCOMP-3フィールドは、計算で一緒に使用できます。コンパイラーは、どのフィールドタイプが(カバーの下で)単一の一般的な数値データタイプに変換されるかを決定します-ルールベース。
他の回答が示唆するように、COMPはビッグエンディアンバイナリを意味します。 COMP-3はパック10進数です。つまり、1つの10進数が各ニブルにマッピングされます。
前の返答が正確さに関する問題を正しかったかどうかはわかりませんが。
PIC S9(9)V9(9)COMPおよびPIC S9(9)V9(9)COMP-3
精度はまったく同じです。これはANSI85規格の一部です。同じ結果が確実にexactlyになるようにCOMPのバイナリ表現に適切な変換が配置されていることを確認するのは、コンパイラとランタイムの仕事です使用方法がディスプレイまたはCOMP-3の場合と同様に達成されます。
IBMメインフレームコンピューターは、ハードウェアに10進数の計算をパックしています。 nの2乗nは数値の長さなので、10進数から2進数への変換は非常に便利です。これは、COMP-3がメインフレームの中で最も高速なフォーマットであることが多いですが、分散システム上にある可能性は低いことを意味します。ただし、これは常にそうであるとは限りません。たとえば、Micro FocusネイティブCOBOLソリューションは、非常に大きな10進数精度(> 18桁)の場合、COMP-5よりもCOMP-3の方が高速になる傾向がありますが、それ以外の場合は逆になります。 Micro FocusのManaged COBOLシステムは、ほとんどの場合COMPで最も高速です(実際には、COMP-5が最高です。これはCOMPに似ていますが、ビッグエンディアンのメモリレイアウトを強制するのではなく、ハードウェアエンディアンを備えています)。
最後に、中間値と一般的な数学の場合、binary-longとbinary-doubleの新しいデータ定義の方が適切な選択であることをお勧めします。これにより、コンパイラーが格納および最適化の方法を決定できるようになります。
分散およびマネージCOBOLでのCOBOLの詳細については、次の記事を確認してください。 http://knol.google.com/k/alex-turner/micro-focus-managed-cobol/2246polgkyjfl/4 およびFacebookでcobolを自由に調べてください:)