アンパック10進数(アンパックじっしんすう)とは | 意味や読み方など丁寧でわかりやすい用語解説

アンパック10進数(アンパックじっしんすう)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

アンパック10進数 (アンパックじっしんすう)

英語表記

Unpacked decimal (アンパッケッドデシマル)

用語解説

アンパック10進数とは、コンピュータ内部で10進数の数値を表現するための一つのデータ形式である。ゾーン10進数(Zoned Decimal Format)とも呼ばれる。この形式の最大の特徴は、10進数の各桁をそれぞれ1バイト(8ビット)のデータとして扱う点にある。コンピュータは基本的に0と1で構成される2進数で情報を処理するが、特に金融や会計などの業務アプリケーションでは、誤差の許されない正確な10進数計算が求められる。アンパック10進数は、そのような要求に応えるために考案された表現方法の一つである。人間が普段使っている10進数の数値表現に近い形を保っているため、データの内容を人間が確認しやすく、文字データとの親和性が高いという利点を持つ。一方で、記憶領域の効率はあまり良くなく、1桁の数値を表現するために8ビットも使用するため、データを圧縮して格納するパック10進数形式に比べて約2倍の容量を必要とする。主にメインフレーム(汎用コンピュータ)で利用されるCOBOL言語などで古くから標準的に使われてきた歴史があり、現在でも基幹システムのデータ交換フォーマットなどで見ることができる。

アンパック10進数の内部構造をより詳細に解説する。前述の通り、この形式では10進数の1桁を1バイトで表現する。1バイトは8ビットで構成されており、これを上位4ビットと下位4ビットに分割して考える。上位4ビットは「ゾーン部」、下位4ビットは「数字部」と呼ばれる。数字部には、表現したい10進数の1桁(0から9)がそのまま2進数で格納される。例えば、数字の「1」は2進数で「0001」、「9」は「1001」となる。一方、ゾーン部には通常、特定の固定値が設定される。この固定値は文字コード体系と深く関連している。メインフレームで広く使われるEBCDICという文字コード体系では、ゾーン部に「1111」(16進数でF)が設定される。これにより、例えば数字の「3」は、ゾーン部「1111」と数字部「0011」を組み合わせた「11110011」(16進数でF3)となり、これはEBCDICにおける文字「3」のコードと一致する。この特性が、アンパック10進数が文字データとの親和性が高いとされる所以である。

アンパック10進数における符号(正負)の表現は特殊であり、数値全体の最後のバイトのゾーン部に格納されるのが一般的である。数値の最後の桁以外のバイトのゾーン部は、前述の通り文字コードに対応した固定値(EBCDICではF)となる。EBCDICを基準とした場合、最後のバイトのゾーン部は、正の数であれば「1100」(16進数でC)、負の数であれば「1101」(16進数でD)が設定される。符号が特に指定されない場合は、正の数と見なされ「1111」(16進数でF)が使われることもある。具体的な例を挙げると、10進数の「+256」をEBCDICベースのアンパック10進数で表現すると3バイトのデータとなる。最初の「2」は「F2」、次の「5」は「F5」となる。最後の桁である「6」は、正の数であるためゾーン部に「C」が設定され、「C6」となる。したがって、「+256」は16進数で「F2 F5 C6」と表現される。同様に、10進数の「-78」であれば、最初の「7」は「F7」、最後の「8」は負の符号を持つため「D8」となり、全体として「F7 D8」と表現される。このように、数値の末尾のバイトを見れば、その数値全体の符号が判別できる仕組みになっている。

アンパック10進数のメリットは、第一に人間にとっての可読性の高さと、文字データとの変換の容易さにある。各バイトがほぼ文字コードに対応しているため、データをダンプして調査する際に内容を直感的に理解しやすい。また、帳票印刷や画面表示のために数値を文字列に変換する処理が非常に単純になる。しかし、デメリットとして記憶領域の非効率性が挙げられる。1桁の表現に本来4ビットあれば十分なところを、ゾーン部を含めて8ビットも使用するため、データ量が大きくなる。特に大量の数値を扱うシステムでは、ディスク容量やメモリ使用量の観点から不利になる。また、多くのCPUは2進数演算を基本としているため、アンパック10進数のまま直接算術演算を行うことはできず、演算前に内部的な形式(パック10進数や2進数)へ変換する処理が必要となり、計算速度の面で劣る場合がある。これらの特性から、アンパック10進数は、データの外部交換や表示・印刷用のフォーマットとして適しているが、純粋な数値計算やデータ保管には、より効率的なパック10進数などが用いられることが多い。

アンパック10進数(アンパックじっしんすう)とは | 意味や読み方など丁寧でわかりやすい用語解説 | いっしー@Webエンジニア