コンピューティングにおいて、符号付きオーバーパンチとは、(通常は)最後の桁を変更することによって数値の符号を格納するコード体系である。これは、 COBOL 、 PL/I 、 RPG などの言語によって、IBM メインフレームの文字データで使用されている。 [ 1 ]その目的は、符号桁に使用されるはずだった文字を保存することである。[2]このコードは、数字と符号の両方を同じカード列に入力できるホレリス パンチ カード コード から派生したものである。その列の数字の上に、符号を示す 12 パンチまたは 11 パンチがあるため、オーバーパンチと呼ばれる。カードの上部 3 行はゾーン パンチと呼ばれ、[3]オーバーパンチを含む可能性のある数字データはゾーン 10 進数と呼ばれる。
IBMの用語では、ストレージ内のバイトの下位4ビットは数字、上位4ビットはゾーンと呼ばれます。[4]数字ビットには0~9の数値が含まれます。ゾーンビットには、文字0~9を形成する「F」xが含まれるか、オーバーパンチを含む文字位置に正または負の値を示す16進数値が含まれ、異なる文字セットを形成します。(A、C、E、およびFゾーンは正の値を示し、BとDは負の値を示します)。
IBM System/360アーキテクチャPACKマシン上の命令は、ゾーン10進数をパック10進数に変換するときにその符号を変換し、対応する命令はゾーン10進数出力の正しいオーバーパンチ符号を設定します。[5]UNPK
言語サポート
英語
PL/I は、PICTURE属性を使用して、符号付きオーバーパンチ付きのゾーン 10 進数データを宣言します。V想定小数点の位置を示す を除く数値ピクチャー内の各文字は、数字を表します。T、 、または のピクチャー文字は、オーバーパンチを含む可能性のある数字位置を示します。 はI、その位置に正の場合は {–I、負の場合は {–R が含まれることを示します。 は、その位置に正の場合は {–I、負の場合は 0-9 が含まれることを示します。は、その位置に正の場合は 0-9、負の場合は {–R が含まれることを示します。
RTIR
例えば、PICTURE 'Z99R'4文字の数値フィールドを表します。最初の位置は空白か、0~9の数字が入ります。次の2つの位置には数字が入り、4番目の位置には正の数の場合は0~9、負の数の場合は{–Rが入ります。[6]
上記の画像に値 1021 を割り当てると、文字「1021」がメモリに保存されます。-1021 を割り当てると、「102J」が保存されます。
コボル
COBOLでは、オーバーパンチを示すために、USAGE IS DISPLAYデータにピクチャ文字「S」を使用します。は、オーバーパンチがフィールドの最初の文字の上にあることを示します。は、最後の文字の上に配置します。はデフォルトです。[7]SIGN IS SEPARATE CHARACTERSIGN IS LEADINGSIGN IS TRAILINGSIGN IS TRAILING
C++ の
C言語にはゾーン10進数に関する規定はない。System i用のIBM ILE C/C++コンパイラは、intまたはとdoubleゾーン10進数間の変換関数を提供している。[8]
- QXXDTOZ() — 倍精度浮動小数点数をゾーン 10 進数に変換
- QXXITOZ() — 整数をゾーン 10 進数に変換
- QXXZTOD() — ゾーン 10 進数を倍精度浮動小数点数に変換する
- QXXZTOI() — ゾーン 10 進数を整数に変換する
EBCDIC オーバーパンチコード
例
10}は-100
45Aは451
ASCII表現
符号付きオーバーパンチ文字の表現は「ASCIIでは標準化されておらず、コンパイラによってオーバーパンチコードが異なります。」場合によっては、「EBCDIC符号付きフィールドを変換テーブルでASCIIに変換した結果と表現が異なります。」[10]他の場合には、文字コードと対応する数字の間の接続が失われてもソースデータの互換性を維持するために、表現は同じです。
数字 '1' で終わる EBCDIC の負のフィールドは、その数字を 'D1'x、大文字の 'J' としてエンコードします。ここで、数字は '1'、ゾーンは 'D' で、負のフィールドを示します。ASCII の大文字の 'J' は '4A'x で、16 進数値は数値と関係がありません。別のエンコードでは、この表現に小文字の 'q'、'71'x を使用します。ここで、数字は '1'、ゾーンは '7' です。これにより、数字と照合順序が保持されますが、オーバーパンチのあるフィールドを個別に認識して変換する必要があります。
例
Gnu COBOLとMicroFocus COBOLでは、小文字の「p」から「y」までを使って負の「0」から「9」までを表します。[11] [12]
ASCIIシステム上のPL/Iコンパイラは、オーバーパンチを表すためにEBCDICと同じ文字セット({、J~R)を使用します。[13]
参考文献
- ^ IBM Corporation (1994 年 6 月). RPG/400 リファレンス(PDF) p. 403 . 2018 年8 月 7 日閲覧。
- ^ 「Tech Talk、COBOL チュートリアル、EBCDIC から ASCII への符号付きフィールドの変換」 。2008年 3 月 15 日閲覧。
- ^ Van Overberghe, Jr., Albert G. (1987). データ処理技術者3等兵。海軍教育訓練プログラム。pp.3–8 。 2022年1月12日閲覧。
- ^ IBM Corporation. IBM System/360 Principles of Operation (PDF) . p. 34 . 2022年1月12日閲覧。
- ^ IBM Corporation (2001 年 10 月). z/Architecture Principles of Operation (第 2 版). pp. 7–112, 7–158 . 2018 年8 月 7 日閲覧。
- ^ IBM Corporation (1995 年 6 月). IBM PL/I for MVS & VM 言語リファレンス(PDF) . pp. 294–296 . 2018 年8 月 2 日閲覧。
- ^ IBM Corporation. 「Enterprise COBOL for z/OS、V4.2、言語リファレンス」。IBM Knowledge Center 。 2020年5月1日閲覧。
- ^ IBM Corporation. 「ライブラリー関数」. IBM Knowledgeedge Center . 2020年5月1日閲覧。
- ^ IBM Corporation (1989). System/370 拡張アーキテクチャリファレンスサマリー. p. 41.
- ^ 「EBCDIC から ASCII への符号付きフィールドの変換」。DISCメディア変換スペシャリスト。2018年11 月 29 日閲覧。
- ^ 「GnuCOBOLプログラマーズガイド」。SourceForge 。 2022年1月12日閲覧。
- ^ 「Micro Focus Visual COBOL 5.0 for Visual Studio 2019」。Micro Focus . 2022年1月12日閲覧。
- ^ Kednos Corporation. 「Kednos PL/I for OpenVMS Systems リファレンスマニュアル」. Kednos.com . 2022年1月12日閲覧。
