2進化10進数

2進時計は、2進値を表すためにLEDを使用する場合があります。この時計では、LEDの各列は、伝統的な60進法の時刻の2進化10進数を表示します

コンピューティングおよび電子システムにおいて、 2進化10進数BCD )は、 10進2進符号化の一種であり、各桁は通常4または8ビットの固定ビット数で表されます。符号やその他の表示(エラーやオーバーフローなど)には、特別なビットパターンが使用される場合があります。

バイト指向システム(つまり、ほとんどの最新コンピュータ)では、アンパックBCD [1]という用語は通常、各桁が完全なバイト(多くの場合、符号を含む)であることを意味しますが、パックBCDは通常、0から9の範囲を表すのに4ビットで十分であるという事実を利用して、1バイト内に2桁をエンコードします。ただし、正確な4ビットエンコードは技術的な理由(例:Excess-3)により異なる場合があります。

BCDの桁を表す10個の状態は、テトラド[2] [3]と呼ばれることもあります(通常、それらを保持するために必要なニブルもテトラドと呼ばれます)。一方、未使用のドントケア状態は、疑似テトラド[de][4] [5] [6] [7] [8] 、 疑似10進数[3]、または疑似10進数と呼ばれます[9] [10] [注1]

2進位置システムと比較したBCDの主な利点は、10進数の量のより正確な表現と丸め、そして従来の人間が読める表現への変換の容易さです。主な欠点は、基本的な算術演算を実装するために必要な回路の複雑さがわずかに増加することと、ストレージ密度がわずかに低いことです

BCDは多くの初期の10進コンピュータで使用されておりIBM System/360シリーズとその後継機、DECVAXBurroughs B1700、Motorola 68000シリーズプロセッサ などのマシンの命令セットに実装されています

BCD自体は以前ほど広く使用されておらず、新しい命令セット(例:ARMx86ロングモード)では利用できないか、制限されています。しかし、10進固定小数点形式と10進浮動小数点形式は依然として重要であり、金融​​、商業、産業用コンピューティングでは、 2進浮動小数点形式に固有の微妙な変換誤差や小数点の丸め誤差が許容されないため、引き続き使用されています。 [11]

背景

BCDは、任意の10進数を4ビットのパターンで表すことができるという事実を利用しています。数字をエンコードする明白な方法は、自然BCD(NBCD)です。これは、次の表に示すように、各10進数字が対応する4ビットの2進値で表されます。これは「8421」エンコードとも呼ばれます。

10進数BCD
8421
00000
10001
20010
30011
40100
50101
60110
70111
81000
91001

この方式は、単純2進化10進数SBCD)またはBCD 8421とも呼ばれ、最も一般的な符号化方式です。[12]その他には、ビットの重み付けにちなんで名付けられた、いわゆる「4221」および「7421」符号化方式や、「Excess-3」符号化方式があります。[13]例えば、BCDの数字6は、0110'b8421表記では1100'b4221(2つの符号化方式が可能)、0110'b7421では()ですが、Excess-3では1001'b)です。

4ビットBCDコードと擬似4進数
ビット重み 0 1 2 3 4 5 6 7 8 9101112131415        コメント        
4800000000111111112進数
340000111100001111
220011001100110011
110101010101010101
名称012345678910111213141510進数
8 4 2 1 (XS-0)0123456789101112131415[14] [15] [16] [17] [注2]
7 4 2 10123456 789     [18] [19] [20]
エイケン(2 4 2 1)01234      56789[14] [15] [16] [17] [注 3]
エクセス-3 (XS-3)-3-2-10123456789101112[14] [15] [16] [17] [注2]
エクセス-6 (XS-6)-6-5-4-3-2-10123456789[18] [注 2]
ジャンプ-アット-2 (2 4 2 1)01      23456789[16] [17]
ジャンプ-アット-8 (2 4 2 1)01234567      89[21] [22] [16] [17] [注 4]
4 2 2 1 (I)0123  45    6789[16] [17]
4 2 2 1 (II)0123  45  67  89[21] [22]
5 4 2 101234   56789   [18] [14] [16] [17]
5 2 2 10123  4 5678  9 [14] [16] [17]
5 1 2 10123   45678   9[19]
5 3 1 101 234  56 789  [16][17]
白 (5 2 1 1)01 2 3 456 7 8 9[23] [18] [14] [16] [17]
5 2 1 101 2 3 45 6 7 89[24]
 0123456789101112131415
磁気テープ 1234567890     [15]
ポール 1326754 0  89  [25]
グレー0132675415141213891110[26] [14] [15] [16] [17] [注2]
グリクソン013267549   8   [27] [14] [15] [16] [17]
レドリー01327645    8 9 [28]
4 3 1 101 23  54  67 89[19]
LARC01 2  4356 7  98[29]
クラール01 2  4398 7  56[2] [3]
ペザリック(RAE) 132 04  867 95 [30] [31] [注5]
オブライエン I(ワッツ)0132  4 9867  5 [32] [14] [16] [17] [注6]
5環式0132  4 5687  9 [28]
トンプキンス I0132  4  9  8756[33] [14] [16] [17]
リッペル0123  4  9  8765[34] [35] [14]
オブライエン2世 0214 3  9785 6 [32] [14] [16] [17]
トンプキンス2世  0143 2 79856  [33] [14] [16] [17]
エクセス-3 グレイ-3-20-1431212119105687[16] [17] [20] [注7] [注2]
6 3 −2 −1 (I)    3210 5489 76[29] [36]
6 3 −2 −1 (II)0   321 654 987 [29] [36]
8 4 −2 −10   43218765   9[29]
ルカル0151411232138769411105[37]
カウツ0  2 513 79 86 4[18]
カウツ2世 94 1 328 67 05 [18] [14]
サスキンド1世 0 1 432 9 85 67[35]
サスキンド2世 0 1 9 84 325 67[35]
 0123456789101112131415

次の表は、様々なBCD符号化方式における0から9までの10進数を表しています。ヘッダーの「 」は各ビットの重みを示しています。5列目(「BCD 8 4 −2 −1」)では、重みのうち2つが負の値です。また、ゾーンBCDの例である、各桁のASCIIおよびEBCDIC文字コードも示されています。8421

 
BCD
8 4 2 1
スティビッツ コードまたはExcess-3エイケンコードまたはBCD
2 4 2 1
BCD
8 4 −2 −1
IBM 702、 IBM 705IBM 7080IBM 1401 8421
ASCII
0000 8421
EBCDIC
0000 8421
0000000110000000010100011 00001111 0000
1000101000001011100010011 00011111 0001
2001001010010011000100011 00101111 0010
3001101100011010100110011 00111111 0011
4010001110100010001000011 01001111 0100
5010110001011101101010011 01011111 0101
6011010011100101001100011 01101111 0110
7011110101101100101110011 01111111 0111
8100010111110100010000011 10001111 1000
9100111001111111110010011 10011111 1001

ほとんどのコンピュータは8ビットバイトでデータを扱うため、BCD数値をエンコードするには以下のいずれかの方法を使用できます。

  • アンパック:各10進数は1バイトにエンコードされ、4ビットで数値を表し、残りのビットは意味を持ちません。
  • パック:2つの10進数字が1バイトにエンコードされ、1つの数字が最下位ニブルビット0~3)に、もう1つの数字が最上位ニブル(ビット4~7)に配置されます。[注 8]

例として、91アンパックBCDを使用して10進数をエンコードすると、次の2バイトのバイナリパターンになります。

10進数:9 12進数:0000 1001 0000 0001

パックBCDでは、同じ数値が1バイトに収まります。

10進数:9 12進数:1001 0001

したがって、アンパックBCDの1バイトの数値範囲は0から9までですが、パックBCDの1バイトの範囲は0から99までです。

1バイトの範囲よりも大きな数値を表すには、任意の数の連続バイトを使用できます。たとえば、ビッグエンディアン12345形式を使用してパックBCDで10進数を表すには、プログラムは次のようにエンコードします。

10進数:0 1 2 3 4 52進数:0000 0001 0010 0011 0100 0101

ここでは、最上位バイトの最上位ニブルがゼロとしてエンコードされているため、数値は次のように格納されます012345(ただし、フォーマットルーチンによって先頭のゼロが置き換えられたり削除されたりする場合があります)。パックBCDは、アンパックBCDよりもストレージの使用効率が高くなります。同じ数値(先頭にゼロがある)をアンパック形式でエンコードすると、2倍のストレージを消費します。

シフト操作マスキング操作は、パックBCDの数字をパックまたはアンパックするために使用されます。その他のビット演算は、数値を同等のビットパターンに変換したり、その逆のプロセスをしたりするために使用されます。

パックBCD

現代のIBMメインフレームシステムなど、ワードがオクテット(8ビットバイト)の倍数である一部のコンピュータは、パックBCD(またはパック10進数[38])数値表現をサポートしています。パックBCDでは、各ニブルが10進数または符号を表します。[注8]パックBCDは少なくとも1960年代から使用されており、それ以降のすべてのIBMメインフレームハードウェアに実装されています。ほとんどの実装はビッグエンディアンです。つまり、各バイトの上位半分に上位桁が配置され、左端のバイト(最下位のメモリアドレスに存在)にパック10進数値の最上位桁が含まれます。右端のバイトの下位ニブルは通常、符号フラグとして使用されますが、符号なし表現の中には符号フラグがないものもあります

例えば、4バイトの値は8ニブルで構成され、上位7ニブルは7桁の10進数値の桁を格納し、最下位ニブルは10進整数値の符号を示します。標準的な符号値は、正(+)の場合は1100(16進数C)、負(-)の場合は1101(D)です。この規則は、 EBCDIC文字のゾーンフィールド符号付きオーバーパンチ表現 に由来します

他に許容される符号は、正の場合は1010 (A) と 1110 (E)、負の場合は1011 (B) です。IBM System/360プロセッサは、PSWのAビットがセットされている場合、1010 (A) と 1011 (B) の符号を使用します。これは、ASCII-8規格(この規格は未だ採用されていません)のためです。ほとんどの実装では、符号ニブルが1111 (F) の符号なしBCD値も提供されています。[39] [40] [41] ILE RPGは、正の場合は1111 (F)、負の場合は1101 (D) を使用します。[42]これらは、符号オーバーパンチのない数字のEBCDICゾーンと一致します。パックBCDでは、127は0001 0010 0111 1100(127C)で表され、-127は0001 0010 0111 1101(127D)で表されます。バローズシステムでは1101(D)を負の値として使い、それ以外の値は正の符号値とみなされます(プロセッサは正の符号を1100(C)に正規化します)。

符号
BCD
8 4 2 1
符号備考
A1 0 1 0+ 
B1 0 1 1- 
C1 1 0 0+推奨
D1 1 0 1-推奨
E1 1 1 0+ 
F1 1 1 1+符号なし

ワードの幅が何バイトであっても、各バイトには2つのニブルがあるため、常に偶数個のニブルが存在します。したがって、nバイトのワードには最大(2 n )−1桁の10進数を格納でき、これは常に奇数桁です。d桁の10進数は、1/2(d+1) bytes of storage space.

たとえば、4バイト(32ビット)のワードは、7桁の10進数と符号を保持でき、±9,999,999の範囲の値を表すことができます。したがって、-1,234,567は7桁の幅で、次のようにエンコードされます。

0001 0010 0011 0100 0101 0110 0111 11011 2 3 4 5 6 7 −

文字列と同様に、パック10進数の最初のバイト(最上位2桁)は、マシンのエンディアンに関係なく、通常、メモリの最下位アドレスに格納されます。

対照的に、4バイトの2の補数2進整数は、-2,147,483,648から+2,147,483,647までの値を表現できます。

パックBCDはストレージを最適に使用しません(同じ数値を格納するために2進表記よりも約20%多くのメモリを使用します)が、算術演算が不要なため、 ASCII 、EBCDIC、またはUnicodeのさまざまなエンコーディングへの変換は簡単です。追加のストレージ要件は通常、固定小数点10進演算が提供する精度と電卓または手計算との互換性の必要性によって相殺されます。ストレージのペナルティを回避し、一般的な変換に算術演算を必要としない、 より高密度のBCDパックが存在します

パックBCDは、COBOLプログラミング言語では「COMPUTATIONAL-3」(多くの他のコンパイラベンダーが採用したIBM拡張)または「PACKED-DECIMAL」(1985 COBOL標準の一部)データ型としてサポートされています。PL /Iでは「FIXED DECIMAL」としてサポートされています。IBM System/360以降の互換メインフレームに加え、パックBCDはDigital Equipment CorporationのオリジナルVAXプロセッサSDS Sigmaシリーズメインフレームの一部モデルのネイティブ命令セットに実装されており、Burroughs Medium Systemsメインフレームシリーズ(1950年代のElectrodata 200シリーズから派生) のネイティブ形式です

負の数の10の補数表現は、パックBCD数値(およびその他のBCD数値)の符号をエンコードするための代替アプローチを提供します。この場合、正の数は常に0から4(両端を含む)の最上位桁を持ち、負の数は対応する正の数の10の補数で表されます

その結果、このシステムでは32ビットのパックBCD数値の範囲は-50,000,000から+49,999,999までとなり、-1は99999999として表されます。(2の補数2進数と同様に、範囲はゼロを中心に対称ではありません。)

固定小数点パック10進数

固定小数点10進数は、一部のプログラミング言語(COBOLやPL/Iなど)でサポートされています。これらの言語では、プログラマーは数字の前に暗黙の小数点を指定できます。

例えば、12 34 56 7Cというバイトでエンコードされたパック10進値は、暗黙の小数点が4桁目と5桁目の間にある場合、固定小数点値+1,234.567を表します。

12 34 56 7C 12 34.56 7+

パックBCDストレージ形式では小数点はサポートされていないため、実際にはメモリに格納されません。小数点の位置はコンパイラによって認識され、生成されたコードはそれに応じてさまざまな算術演算を行います。

高密度エンコーディング

10進数の桁に4ビットが必要な場合、3つの10進数の桁には12ビットが必要です。しかし、2の10乗(1,024)は10の3乗(1,000)よりも大きいため、3つの10進数を一緒にエンコードする場合、必要なビット数は10ビットだけです。このようなエンコーディングには、Chen-Hoエンコーディング高密度パック10進数(DPD)の2つがあります。後者には、エンコーディングのサブセットによって、通常のBCDと同様に、2つの桁を最適な7ビットでエンコードし、1つの桁を4ビットでエンコードするという利点があります。

ゾーン10進数

IBMメインフレームシステムなど、一部の実装ではゾーン10進数表現をサポートしています。各10進数は8ビット[nb 9]バイトに格納され、下位4ビットはBCD形式で数値をエンコードします。上位4ビット[nb 10]は「ゾーン」ビットと呼ばれ、通常は固定値に設定され、バイトには数値に対応する文字値、またはプラスまたはマイナスを表す値が保持されます。 EBCDIC [nb 11]システムでは、ゾーン値1111 2 (F 16 ) を使用し、F0 16~F9 16(0~9のコード)を生成します。正の場合にはゾーン値1100 2 (C 16 ) を使用し、C0 16~C9 16({~Iのコード)を生成します。負の場合にはゾーン値1110 2 (D 16 ) を使用し、D0 16~D9 16(}~Rのコード)を生成します。同様に、ASCIIシステムではゾーン値0011 (16進数3) を使用し、文字コード30~39 (16進数) を生成します。

符号付きゾーン10進数値の場合、右端(最下位)のゾーンニブルは符号桁を保持します。これは、符号付きパック10進数値(上記参照)で使用される値と同じです。したがって、16進バイト F1 F2 D3 としてエンコードされたゾーン10進数値は、符号付き10進数値 -123 を表します。

F1 F2 D31 2 -3

EBCDICゾーン10進変換表

BCD桁16進EBCDIC文字
0+C0A0E0F0{ (*) \ (*)0
1+C1A1E1F1A~ (*) 1
2+C2A2E2F2BsS2
3+C3A3E3F3CtT3
4+C4A4E4F4DuU4
5+C5A5E5F5EvV5
6+C6A6E6F6FwW6
7+C7A7E7F7GxX7
8+C8A8E8F8HyY8
9+C9A9E9F9IzZ9
0−D0B0  } (*)^ (*)  
1−D1B1  J   
2−D2B2  K   
3−D3B3  L   
4−D4B4  M   
5−D5B5  N   
6−D6B6  O   
7−D7B7  P   
8−D8B8  Q   
9−D9B9  R   

(*)注:これらの文字は、ローカル文字コードページの設定によって異なります

固定小数点ゾーン10進数

一部の言語(COBOLやPL/Iなど)は、固定小数点ゾーン10進数を直接サポートしており、数値の小数点間のどこかに暗黙的な小数点を割り当てます。

例えば、4桁目の右側に暗黙的な小数点を持つ6バイトの符号付きゾーン10進数が与えられた場合、16進バイト F1 F2 F7 F9 F5 C0 は +1,279.50 という値を表します。

F1 F2 F7 F9 F5 C01 2 7 9. 5 +0

BCDによる演算

加算

最初に2進数で加算し、その後BCDに変換することで加算を行うことができます。2桁の単純な和の変換は、2桁の数字を加算した5ビットの結果が9より大きい値になる場合、6(つまり、16 - 10)を加算することで行うことができます。6を加算する理由は、4ビットBCDの値は16通り(2の4= 16なので)ありますが、有効な値は10通り(0000から1001)しかないためです。例えば:

1001 + 1000 = 10001 9 + 8 = 17

10001は、望ましい結果の10進数ではなく2進数表現ですが、最上位の1(「キャリー」)は4ビットの2進数には収まりません。10進数と同様に、BCDでは1桁あたり9(1001)を超える値は存在できません。これを修正するために、合計に6(0110)を加算し、結果を2つのニブルとして扱います。

10001 + 0110 = 00010111 => 0001 0111 17 + 6 = 23 1 7

結果の2つのニブル、0001と0111は、数字の「1」と「7」に対応します。これにより、BCDでは「17」となり、正しい結果となります

この手法は、右から左へグループで加算し、2桁目をキャリーとして伝播させ、各桁のペアの合計の5ビット結果を常に9と比較することで、複数の桁を加算することに拡張できます。一部のCPUは、2進加算および減算演算後のBCD算術調整を容易にするために、ハーフキャリーフラグを提供しています。Intel 8080Zilog Z80、およびx86ファミリーのCPUは、DAA(10進調整アキュムレータ)オペコードを提供しています。

減算

減算は、減数の10の補数を被減数に加算することによって行われます。BCDで数値の符号を表すには、正の数を表すには0000を使用し、負の数を表すには1001を使用します。残りの14の組み合わせは無効な符号です。符号付きBCD減算を説明するために、次の問題を考えてみましょう:357 − 432

符号付きBCDでは、357は0000 0011 0101 0111です。432の10の補数は、432の9の補数に1を加えることで得られます。したがって、999 - 432 = 567、567 + 1 = 568です。BCDで568の前に負の符号コードを付けることで、-432を表すことができます。したがって、符号付きBCDでの-432は1001 0101 0110 1000です。

両方の数が符号付きBCDで表されたので、これらを足し合わせることができます。

 0000 0011 0101 0111 0 3 5 7+ 1001 0101 0110 1000 9 5 6 8= 1001 1000 1011 1111 9 8 11 15

BCDは10進数表現の一種であるため、上記の数字の合計のいくつかは無効です。無効なエントリ(1001より大きいBCD桁)が存在する場合、6が加算されてキャリービットが生成され、合計が有効なエントリになります。したがって、無効なエントリに6を加算すると、次のようになります。

 1001 1000 1011 1111 9 8 11 15+ 0000 0000 0110 0110 0 0 6 6= 1001 1001 0010 0101 9 9 2 5

したがって、減算の結果は1001 1001 0010 0101 (-925) です。結果を確認するために、最初の桁が9であることに注目してください。これは負の数を意味します。357 − 432 は負の数になるはずなので、これは正しいようです。残りのニブルはBCDなので、1001 0010 0101 は925です。925の10の補数は1000 − 925 = 75なので、計算された答えは-75です。

加算するニブルの数が異なる場合(1053 − 2など)、10の補数を取るか減算する前に、桁数の少ない数の前に0を付ける必要があります。したがって、1053 − 2の場合、まず2をBCDで0002として表し、0002の10の補数を計算する必要があります

コンピュータにおけるBCD

IBM

IBMは、数字、大文字、特殊文字を表す6ビットの英数字コードに、 2進化10進数交換コード(BCDIC、単にBCDと呼ばれることもあります)という用語を使用していました。BCDIC英数字のいくつかのバリエーションは、 IBM 1620(1959年発売)、IBM 1400シリーズ、およびIBM 700/7000シリーズの非10進アーキテクチャー製品など、初期のIBMコンピュータのほとんどで使用されています

IBM 1400 シリーズは文字アドレス指定可能なマシンで、各位置はB、A、8、4、2、1ラベル付けされた 6 ビットと、奇数パリティ チェック ビット ( C ) およびワード マーク ビット ( M ) で構成されています。1から9までの数字をエンコードする場合、BAはゼロで、ビット8から1は標準の 4 ビット BCD で表される数字の値です。 その他のほとんどの文字の場合、ビットBAは、パンチカード文字コードの「12」、「11」、「0」の「ゾーン パンチ」から単純に導出され、ビット8から1は1から9 のパンチから導出されます。 「12 ゾーン」パンチはBAの両方を設定し、「11 ゾーン」パンチはBを設定し、「0 ゾーン」(0 パンチと他のパンチの組み合わせ)A設定ますパンチカード内の通貨記号$11,8,3)は、メモリ内では(B,8,2,1)としてエンコードされていました。これにより、パンチカード形式と内部ストレージ形式間の変換回路は、いくつかの特殊なケースを除いて非常にシンプルになります。重要な特殊なケースの1つは数字0で、カードでは1つの0がパンチされ、コアメモリでは(8,2)で表されます。[43]

IBM 1620のメモリは、通常の8、4、2、1に加えて、フラグビットとして使用されるFと、奇数パリティチェックビットであるCで構成される6ビットのアドレス指定可能な桁で構成されています。BCD英数字は桁のペアを使用してエンコードされ、「ゾーン」は偶数アドレスの桁に、「数字」は奇数アドレスの桁に配置されます。「ゾーン」は、1400シリーズと同様に、12、11、0の「ゾーンパンチ」に関連付けられています入出力変換ハードウェアは内部の桁ペアと外部の標準6ビットBCDコードの間で変換を行います

IBM 7070IBM 7072、およびIBM 7074の 10進アーキテクチャでは、英数字は10桁のワードの数字ペア( BCDではなく、数字の2/5コードを使用)を使用してエンコードされ、左の数字に「ゾーン」、右の数字に「数字」が配置されます。入出力変換ハードウェアは、内部の数字ペアと外部標準の6ビットBCDコード間の変換を行います。

System/360の導入により、IBMは6ビットBCD英数字を8ビットEBCDICに拡張し、より多くの文字(小文字など)を追加できるようになりました。可変長のパックBCD数値データ型も実装されており、パック10進データに対して直接演算を実行する機械語命令を提供しています。

IBM 1130および1800では、パックBCDはIBMの商用サブルーチン・パッケージによってソフトウェアでサポートされています

今日でも、BCDデータはIBM Db2などのIBMデータベースや、 z/ArchitecturePOWER6以降のPower ISAプロセッサーなどのプロセッサーで広く使用されています。これらの製品では、BCDは通常、ゾーンBCD(EBCDICまたはASCII)、パックBCD(1バイトあたり2桁の10進数)、または「純粋な」BCDエンコーディング(各バイトの下位4ビットに1桁の10進数をBCDとして格納)です。これらはすべて、ハードウェアレジスタと処理装置、およびソフトウェアで使用されます。

その他のコンピューター

Digital Equipment CorporationのVAXシリーズには、パックBCDデータに対して直接演算を実行したり、パックBCDデータと他の整数表現との間で変換を実行できる命令が含まれています。 [41] VAXのパックBCD形式は、IBM System/360およびIBMの後継互換プロセッサの形式と互換性があります。MicroVAX以降のVAX実装では、CPUからこの機能は削除されましたが、不足している命令をオペレーティングシステムが提供するソフトウェアライブラリに実装することで、以前のマシンとのコード互換性を維持しました。これは、廃止された命令に遭遇すると例外処理によって自動的に呼び出されるため、それらを使用するプログラムは新しいマシンで変更なしに実行できます

多くのプロセッサは、 BCDエンコードされた整数演算をハードウェアでサポートしています。例えば、6502[44] [45]、 Motorola 68000シリーズ[46] 、 x86シリーズなどです[47] Intel x86アーキテクチャは、浮動小数点レジスタへのロードとストアが可能な独自の18桁(10バイト)BCD形式をサポートしており、そこから計算を実行できます。[48]

最近のコンピュータでは、このような機能はCPUの命令セットではなくソフトウェアで実装されることがほとんどですが、BCD数値データは商用および金融アプリケーションでは依然として非常に一般的です

短いながらも理解しにくいワード並列ロジックと2進算術演算のシーケンスを使用して、パックBCDとゾーン10進数の加減算を実装するためのトリックがあります。[49]例えば、次のコード(C言語で記述)は、32ビット2進演算を使用して、符号なし8桁のパックBCD加算を計算します

uint32_t BCDadd ( uint32_t a , uint32_t b ) { uint32_t t1 , t2 ; // 符号なし32ビットの中間値         t1 = a + 0x06666666 ; t2 = t1 ^ b ; // キャリー伝播なしの合計t1 = t1 + b ; // 暫定的な合計t2 = t1 ^ t2 ; // すべてのバイナリキャリービットt2 = ~ t2 & 0x11111110 ; // BCDキャリービットのみt2 = ( t2 >> 2 ) | ( t2 >> 3 ); // 修正return t1 - t2 ; // 修正されたBCD合計}                                           

電子工学におけるBCD

BCDは、数値を表示する電子システム、特にマイクロプロセッサを搭載せず、デジタルロジックのみで構成されたシステムで広く使用されています。BCDを採用することで、各桁を独立したサブ回路として扱うことができ、表示のための数値データの操作が大幅に簡素化されます。

これは、ディスプレイハードウェアの物理的な現実に非常によく一致しています。たとえば、設計者は、メータリング回路を構築するために、一連の同一の7セグメントディスプレイを使用することを選択する場合があります。数値が純粋な2進数として保存および操作される場合、そのようなディスプレイとのインターフェースには複雑な回路が必要になります。したがって、計算が比較的単純な場合、BCDで作業する方が、2進数との間で変換するよりも全体的にシンプルなシステムになる可能性があります。ほとんどのポケット電卓は、すべての計算をBCDで行います。

このタイプのハードウェアが組み込みマイクロコントローラやその他の小型プロセッサを使用する場合にも、同じ議論が当てはまります。多くの場合、数値を内部的にBCD形式で表現すると、コードが小さくなります。これは、このような限られたプロセッサでは、バイナリ表現との変換にコストがかかる可能性があるためです。このようなアプリケーション向けに、一部の小型プロセッサには専用の算術モードが搭載されており、BCD量を操作するルーチンの作成に役立ちます。 [50] [51]

純粋な2進数との比較

利点

デメリット

  • 既存のBCD実装は、ネイティブBCD演算に対するプロセッサのサポートが限られているため、特に組み込みシステムでは、バイナリ表現での演算よりも遅くなるのが一般的です。[52]
  • 一部の演算は実装がより複雑です。加算器は、ラップさせて早期にキャリーを生成するための追加ロジックを必要とします。また、BCD加算には、純粋なバイナリと比較して15~20%多くの回路が必要です。[要出典]乗算には、シフトマスク加算よりもやや複雑なアルゴリズムを使用する必要があります(バイナリ乗算では、バイナリシフトと加算、またはそれに相当する桁ごとまたは桁グループごとの演算が必要です)。
  • 標準BCDでは、桁ごとに4ビットが必要で、バイナリエンコードよりも約20%多くのスペースが必要です(4ビットとlog 2 10ビットの比率は1.204です)。3桁を10ビットでエンコードするようにパックすると、ストレージのオーバーヘッドは大幅に削減されますが、既存のハードウェアで一般的な8ビットバイト境界と一致しないエンコードが必要になるため、これらのシステムでの実装が遅くなります。

表現のバリエーション

数値に他の表現を採用する様々なBCD実装が存在します。Texas InstrumentsHewlett-Packard、その他のメーカーが製造するプログラマブル電卓は、通常、浮動小数点BCD形式を採用しており、(10進)指数には通常2桁または3桁を使用します。符号桁の追加ビットは、無限大、アンダーフローオーバーフローエラー(点滅表示)などの特殊な数値を示すために使用される場合があります。

符号付きバリエーション

符号付き10進値は、いくつかの方法で表現できます。たとえば、 COBOLプログラミング言語は5つのゾーン10進形式をサポートしており、それぞれが異なる方法で数値の符号をエンコードします。

説明
符号なし符号ニブルなしF1 F2 F3
符号付き末尾(標準形式)最後の(最下位)バイトに符号ニブルF1 F2 C3
符号付き先頭(オーバーパンチ)最初の(最上位)バイトに符号ニブルC1 F2 F3
符号付き末尾セパレート数字バイトの後に続くセパレート符号文字バイト('+'または)'−'F1 F2 F3 2B
符号付き先頭セパレート数字バイトの前にある別の符号文字バイト('+'または)'−'2B F1 F2 F3

電話2進化10進数(TBCD)

3GPPはTBCD [53]開発しました。これは、残りの(未使用の)ビットの組み合わせを使用して特定の電話記号を追加するBCDの拡張であり、[54] [55]、電話のキーパッド設計に似ています

10進
TBCD
8 4 2 1
*1 0 1 0
#1 0 1 1
a1 1 0 0
b1 1 0 1
c1 1 1 0
桁数が奇数の場合のフィラーとして使用されます1 1 1 1

前述の3GPP文書では、各バイトのニブルを入れ替えたTBCD-STRINGを定義しています。ビット、オクテット、および数字は1からインデックス付けされ、右からビット、左から数字とオクテットが付けられます。

オクテットnのビット8765は数字2 nをエンコードします

オクテットnのビット4321は数字2( n -1)+1 をエンコードします

数字を意味するので、 TBCDでは1234次のようになります。21 43

この形式は、現代の携帯電話でダイヤル番号だけでなく、オペレータID(MCC/MNCタプル)、IMEIIMSI(SUPI)などを送信するために使用されています。[56] [57]

代替エンコーディング

表現と計算における誤差が、ディスプレイとの間の変換速度よりも重要な場合は、スケーリングされた2進表現を使用できます。これは、10進数を2進数でエンコードされた整数と、2進数でエンコードされた符号付き10進指数として格納します。たとえば、0.2は2 × 10−1と表現できます。

この表現は、乗算と除算を高速に行うことができますが、小数点を揃えるために、加算と減算中に10の累乗でシフトする必要がある場合があります。これは、小数点以下の桁数が固定で、この調整を必要としないアプリケーション、特に小数点以下2桁または4桁で十分な金融アプリケーションに適しています。実際、基数点の位置が暗黙的に示される ため、これはほぼ固定小数点演算の一種です

ヘルツ符号化チェン・ホー符号化は、 BCD符号化された3桁の数字のグループを10ビット値[注1]との間で変換するためのブール変換を提供します。これらの値は、わずか2~3ゲートの遅延でハードウェアで効率的に符号化できます。高密度パック10進数(DPD)は同様の方式[注1]であり、 IEEE 754-2008浮動小数点規格で規定されている2つの代替10進符号化の1つで、先頭桁を除く仮数のほとんどに使用されます

応用

多くのパーソナルコンピュータのBIOS、日付と時刻をBCD形式で保存します。これは、オリジナルのIBM PC ATマザーボードで使用されていたMC6818リアルタイムクロックチップがBCDでエンコードされた時刻を提供していたためです。この形式は、表示用にASCIIに簡単に変換できます。 [58] [59]

Atariの8ビットコンピュータは、浮動小数点数にBCD形式を使用しています。MOS Technology 6502プロセッサは、加算と減算の命令にBCDモードを備えています。Psion Organiser 1ハンドヘルドコンピュータのメーカー提供ソフトウェアも、浮動小数点の実装にBCDを使用しています。後期のPsionモデルは、2進数のみを使用しています。

PlayStation 3の初期モデルは、日付と時刻をBCDで保存していました。そのため、2010年3月1日にコンソールが世界中で停止しました。BCDで保存された年号の下2桁が16と誤って解釈され、本体の日付にエラーが発生し、ほとんどの機能が動作しなくなりました。これは2010年問題と呼ばれています

1972年のGottschalk対Benson事件において米国最高裁判所は、 BCDエンコードされた数値をコンピュータ上で2進数に変換する特許を認めた下級裁判所の判決を覆しました

この判決では、特許は「数式を完全に先取りし、実質的にはアルゴリズム自体に対する特許となる」と指摘されています。[60]これは、ソフトウェアとアルゴリズムの特許性を決定した画期的な判決でした

参照

注釈

  1. ^ abc 標準的なパックされた4ビット表現では、10個のテトラドと6個の擬似テトラドを含む16の状態(各桁に4ビット)がありますが、ヘルツチェン・ホーDPDエンコーディングなどのより高密度にパックされた方式では、 1024状態(3桁に10ビット)のうち未使用の状態はわずか24状態です
  2. ^ abcde 0~9の10進範囲外のコード状態(黒で表示)は、非BCDコードの変種における追加の状態を示します。ここで説明するBCDコードの変種では、これらは擬似テトラードです。
  3. ^ エイケンコードは、2 4 2 1コードの一つです。2* 4 2 1コードとも呼ばれます。
  4. ^ 8ジャンプコードは、非対称2 4 2 1コードとも呼ばれます。
  5. ^ ザリックコードは、英国王立航空機協会(RAE)コードとも呼ばれます
  6. ^ オブライエン符号タイプIは、ワッツ符号またはワッツ反射10進数(WRD)符号としても知られています。
  7. ^ エクセス3グレイ符号は、グレイスティビッツ符号としても知られています
  8. ^ ab 同様に、ミニコンピュータでは複数の文字がマシンワードにパックされることがよくありました。IBM SQUOZEおよびDEC RADIX 50を参照してください。
  9. ^ 古いマシンでは6ビット。
  10. ^ 古いマシンでは2ビット。
  11. ^ C0 16およびD0 16に示されている値は、コードページ037のものです。

参考文献

  1. ^ Intel. 「ia32アーキテクチャ・マニュアル」(PDF)。Intel 2022年10月9日にオリジナルからアーカイブ(PDF)2015年7月1日取得
  2. ^ ab Klar, Rainer (1970-02-01). "1.5.3 2進化10進数の変換" [デジタルコンピュータ入門]. Sammlung Göschen (ドイツ語). Vol. 1241/1241a (第1版). ベルリン, ドイツ: Walter de Gruyter & Co. / GJ Göschen'sche Verlagsbuchhandlung  [de] . pp. 17, 21. ISBN 3-11-083160-0. . アーカイブ番号 7990709. 2020年4月18日にオリジナルからアーカイブ2020年4月13日閲覧(205ページ)(注:2019年に初版の再版がISBNで入手可能です。 3-11002793-3978-3-11002793-8改訂・拡張された第4版も存在します
  3. ^ abc Klar, Rainer (1989) [1988-10-01]. "1.4 Codes: Binär verschlüsselte Dezimalzahlen" [1.4 Codes: Binary coded decimal numbers]. Digitale Rechenautomaten – Eine Einführung in die Struktur von Computerhardware [デジタルコンピュータ – コンピュータハードウェアの構造入門]. Sammlung Göschen (ドイツ語). Vol. 2050 (第4版改訂). ベルリン, ドイツ: Walter de Gruyter & Co. pp. 25, 28, 38– 39. ISBN 3-11011700-2. p. 25: […] Die nicht erlaubten 0/1-Muster nennt man auch Pseudodezimalen. […](320ページ)
  4. ^ シュナイダー、ハンス=ヨッヘン (1986). Lexikon der Informatik und Datenverarbeitung (ドイツ語) (第2版). R. Oldenbourg Verlag München Wien. ISBN 3-486-22662-2
  5. ^ Tafel, Hans Jörg (1971). Einführung in die digitale Datenverarbeitung [デジタル情報処理入門](ドイツ語). ミュンヘン:Carl Hanser Verlag . ISBN 3-446-10569-7
  6. ^ Steinbuch, Karl W. ; Weber, Wolfgang; Heinemann, Traute 編 (1974) [1967]. Taschenbuch der Informatik - Band II - Struktur und Programmierung von EDV-Systemen . Taschenbuch der Nachrichtenverarbeitung(ドイツ語). 第2巻(第3版). ベルリン、ドイツ:Springer -Verlag . ISBN 3-540-06241-6 . LCCN  73-80607.
  7. ^ Tietze, Ulrich; Schenk, Christoph (2012-12-06). Advanced Electronic Circuits. Springer Science & Business Media . ISBN 978-3642812415. 9783642812415. 2015-08-05閲覧.
  8. ^ Kowalski, Emil (2013-03-08) [1970]. Nuclear Electronics. Springer-Verlag . doi :10.1007/978-3-642-87663-9. ISBN 978-3642876639. 9783642876639, 978-3-642-87664-6 . 2015-08-05閲覧
  9. ^ Ferretti, Vittorio (2013-03-13). Wörterbuch der Elektronik, Datentechnik und Telekommunikation / Dictionary of Electronics, Computing and Telecommunications: Teil 1: Deutsch-English / Part 1: German-English. 第1巻(第2版). Springer-Verlag. ISBN 978-36429808869783642980886. 2015年8月5閲覧
  10. ^ シュパイザー、アンブロシウス・パウル(1965) [1961].デジタルコンピュータ - 基礎 /回路 / 動作 / 信頼性(ドイツ語) (第2版). ETH チューリッヒ、チューリッヒ、スイス: Springer-Verlag / IBM . p. 209. LCCN  65-14624. 0978.
  11. ^ カウリショー、マイク・F. (2015) [1981, 2008]. 「一般10進演算」 . 2016年1月2閲覧
  12. ^ エヴァンス、デイビッド・シルベスター(1961年3月)。「第4章:補助機器:デジタイザ用出力駆動およびパリティチェックリレー」。デジタルデータ:分析とプロセス制御のための導出と縮約(第1版)。ロンドン、英国:ヒルガー&ワッツ社インターサイエンス出版社。pp. 46–64 [56–57] 。 2020年5月24日閲覧(8+82ページ)(注:結果として得られる5ビットコードの奇数パリティを実現するために、最下位ビットとして追加のパリティビットを適用した4ビット8421 BCDコードは、フェランティコードとしても知られています。)
  13. ^ララ パラグ・K.(2007年)。現代デジタル設計の原則。ジョン・ワイリー&サンズ。pp.  20– 25。ISBN 978-0-470-07296-7
  14. ^ abcdefghijklmn Berger, Erich R. (1962). "1.3.3. Die Codierung von Zahlen". ドイツのカールスルーエで執筆。Steinbuch , Karl W. (ed.). Taschenbuch der Nachrichtenverarbeitung (in German) (第1版). ベルリン/ゲッティンゲン/ニューヨーク: Springer-Verlag OHG . pp.  68– 75. LCCN  62-14511.(注:示されているカウツ符号(II)は、8つのバイナリ状態すべてに1の数が奇数個含まれており、8つの状態すべてに1の数が偶数個含まれている元のカウツ符号(I)をわずかに変更したもので、最上位ビットを反転すると9の補数が生成されます。)
  15. ^ abcdef ケメラー、ヴィルヘルム[ドイ​​ツ語] (1969年5月). 「II.15. 構造:オートメーションにおける情報処理」。ドイツ、イエナで執筆。Frühauf, Hans [ドイツ語] ; ケメラー、ヴィルヘルム; シュレーダー、クルツ; ウィンクラー、ヘルムート(編). デジタル・オートメーション – 理論、構造、技術、プログラミング。電子理論と規則(ドイツ語)。第5巻(第1版)。ベルリン、ドイツ:Akademie-Verlag GmbH。161ページ。ライセンス番号:202-100/416/69。注文番号:4666 ES 20 K 3(注: 1973年の第2版も存在します。)
  16. ^ abcdefghijklmnopq Dokter, Folkert; Steinhauer, Jürgen (1973-06-18). Digital Electronics. Philips Technical Library (PTL) / Macmillan Education (第1版英語版の再版). Eindhoven, Netherlands: The Macmillan Press Ltd. / NV Philips' Gloeilampenfabrieken . doi :10.1007/978-1-349-01417-0. ISBN 978-1-349-01419-4. SBN 333-13360-92020年7月16日時点のオリジナルよりアーカイブ2020年5月11日閲覧(270ページ)(注:これはドイツ語版2巻の第1巻の翻訳に基づいています。)
  17. ^ abcdefghijklmnopq ドクター、フォルケルト; シュタインハウアー、ユルゲン (1975) [1969].デジタル電子工学:機械工学とデータ処理:理論的基礎と技術的側面. Philips Fachbücher (ドイツ語). 第1巻(改良・拡張第5版). ハンブルク、ドイツ:Deutsche Philips GmbH . 50ページ. ISBN  3-87145-272-6(xii+327+3ページ)(注:第1巻のドイツ語版は1969年、1971年に出版され、1972年と1975年に2版が出版されました。第2巻は1970年、1972年、1973年、1975年に出版されました。)
  18. ^ abcdef Kautz, William H. (1954年6月). "IV. Examples A. Binary Codes for Decimals, n = 4". Optimized Data Encoding for Digital Computers. Convention Record of the IRE, 1954 National Convention, Part 4 - Electronic Computers and Information Theory. Session 19: Information Theory III - Speed and Computation. Stanford Research Institute, Stanford, California, USA: IRE pp. 47–57 [49, 51– 52, 57]. 2020年7月3日時点のオリジナルよりアーカイブ2020年7月3日閲覧。p. 52: […] [表IIの]最後の列「Best」は、任意のコードで可能な最大分数、つまり0.60を示しており、これは従来のコードよりも1.5倍優れています。この極値は、図4のグラフのn = 4の10個の太線で囲まれた頂点、あるいは実際には、8個すべてに偶数個(または奇数個)の「1」が含まれる10個のコード組み合わせの任意の組み合わせで達成されます。表IIの2行目と3行目は、検出されない単一バイナリエラーあたりの小数点変化の平均値と最大値を示しており、これらは第II節のΔ 1とδ 1 の式を用いて導出されています。「小数点変化」の基準を用いた小数点の混同指数は、c ij = |i − j| i,j = 0, 1, … 9とします。ここでも、図4に示されている「最良の」配置(平均値と最大値は同じ)は、従来のコードよりも大幅に優れています。[…] 図4 小数点の混同最小コード。[…] δ 1 =2 Δ 1 =15 […][1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] (注:4ビットBCD「小数点用最小混乱コード」の組み合わせセット(著者はそのうち1つだけを4ビットグラフの形で明示的に示しています(ここではコードIとして再現されています))に加えて、著者は16状態の4ビット「アナログデータ用バイナリコード」もコード表の形で示していますが、これについてはここでは説明しません。ここで示されているコードIIは、バーガーが説明したコードIの修正版です。)
  19. ^ abc ジャン・P・チナル(1973年1月)。「コード」。フランス、パリで執筆。デジタルシステムの設計手法。アラン・プレストン、アーサー・サマー訳(英語版第1版)。ドイツ、ベルリン:アカデミー・フェアラークシュプリンガー・フェアラーク。46ページ。doi 10.1007/978-3-642-86187-1_3。ISBN   978-0-387-05871-9。ライセンス番号:202-100/542/73。注文番号:7617470(6047) ES 19 B 1/20 K 3。2020年6閲覧 (xviii+506ページ)(注:1967年のフランス語原書は「ブール演算と算術計算の技法」というタイトルで、デュノ版 [fr]から出版されました。)
  20. ^ ab 軍事ハンドブック:エンコーダ - シャフト角度からデジタル化(PDF)米国国防総省。1991年9月30日。MIL-HDBK-231A。2020年7月25日にオリジナルからアーカイブ(PDF) 。 2020年7月25日閲覧(注:MIL-HDBK-231(AS)(1970年7月1日)に取って代わります。)
  21. ^ ab Stopper, Herbert(1960年3月)。ドイツのリッツェルシュテッテンで執筆。Runge , Wilhelm Tolmé(編)「Ermittlung des Codes und der logischen Schaltung einer Zähldekade」。Telefunken -Zeitung (TZ) - Technisch-Wissenschaftliche Mitteilungen der Telefunken GMBH(ドイツ語)。33 127)。ベルリン、ドイツ:Telefunken13~ 19(7ページ)
  22. ^ ab Borucki, Lorenz; Dittmann, Joachim (1971) [1970年7月、1966年、1965年秋]. 「2.3 デジタル機器技術における基本的なコード」。ドイツのクレーフェルト/カールスルーエで執筆。Digitale Meßtechnik : Eine Einführung(ドイツ語)(第2版)。ベルリン/ハイデルベルク、ドイツ:Springer-Verlag。pp . 10–23 [12–14]。doi : 10.1007/978-3-642-80560-8。ISBN  3-540-05058-2 LCCN  75-131547。ISBN  978-3-642-80561-5 (viii+252ページ)初版
  23. ^ White, Garland S. (1953年10月). 「デジタルコンピュータのためのコード化10進数システム」. Proceedings of the Institute of Radio Engineers . 41 (10). Institute of Radio Engineers (IRE): 1450– 1452. doi :10.1109/JRPROC.1953.274330. eISSN  2162-6634. ISSN  0096-8390. S2CID  51674710. (3ページ)
  24. ^ 「異なる種類のバイナリコード」. Electronic Hub . 2019年5月1日 [2015年1月28日]. セクション2.4 5211コード. 2020年5月18日時点のオリジナルからアーカイブ2020年8月4日閲覧
  25. ^ Paul, Matthias R. (1995-08-10) [1994]. 「Unterbrechungsfreier Schleifencode」[連続ループ符号]. 1.02(ドイツ語) 。 2008年2月11日閲覧(注:著者はこのコードをシュライフェンコード(英語:ループコード)と呼んでいます。グレイBCDコードとの相違点は、状態0のエンコードのみで、全周回転スリップリング用途向けの巡回単位距離コードとなっています。オールゼロのコードパターンを回避することで、ループの自己テストが可能になり、データラインを途切れのない電力分配に使用できます。)
  26. ^ Gray, Frank (1953-03-17) [1947-11-13]. パルス符号通信(PDF)。米国ニューヨーク州:ベル電話研究所米国特許2,632,058 。シリアル番号785697。 2020年8月5日にオリジナルからアーカイブ(PDF)2020年8月5日閲覧(13ページ)
  27. ^ グリクソン、ハリー・ロバート(1957年3月)。「巡回2進10進コードを活用できるか?」『制御工学4 (3)。ダン・ドネリー出版会社ダン・アンド・ブラッドストリート社の一部門、テクニカル・パブリッシング・カンパニー87~ 91。ISSN 0010-8049  。 (5ページ)
  28. ^ レドリー、ロバート・スティーブン、ロトロ、ルイス・S、ウィルソン、ジェームズ・ブルース(1960年)。「第4部 デジタルコンピュータ回路の論理設計;第15章 シリアル算術演算;第15章-7 追加トピック」。デジタルコンピュータと制御工学(PDF)。マグロウヒル電気電子工学シリーズ(第1版)。米国ニューヨーク:マグロウヒル・ブック・カンパニー(印刷:メイプル・プレス・カンパニー、米国ペンシルベニア州ヨーク)。517 518ページ 。ISBN 0-07036981-X. ISSN  2574-7916. LCCN  59015055. OCLC  1033638267. OL  5776493M. SBN 07036981-X. . ark:/13960/t72v3b312. 2021年2月19日にオリジナルからアーカイブ(PDF) 。 2021年2月19日閲覧。p. 517: […] 巡回符号は主にリレー回路の使用において有利です。なぜなら、スティッキーリレーは、ある巡回番号から次の巡回番号への移行が遅延されるため、誤った状態を生成しないからです。この特性を持つ巡回符号は他にも多数あります。[…] {{cite book}}: ISBN / Date incompatibility (help)[12] (xxiv+835+1ページ) (注:Ledleyは、説明した巡回符号を巡回10進符号化2進符号として分類しました。)
  29. ^ abcd Savard, John JG (2018) [2006]. 「10進表現」. quadibloc . 2018年7月16日時点のオリジナルよりアーカイブ2018年7月16日閲覧
  30. ^ ペザリック、エドワード・ジョン(1953年10月)。巡回累進二進化十進数表記システム(技術ノート MS15)。英国ファーンバラ:王立航空機研究所(RAE)。(4ページ)(注:巡回コード化二進化十進数表記システムと呼ばれることもあります。)
  31. ^ ペザリック、エドワード・ジョン、ホプキンス、AJ(1958年)。シャフトの回転を符号化するための最近開発されたデジタルデバイス(技術ノート MS21)。英国ファーンバラ:王立航空機研究所(RAE)。
  32. ^ ab O'Brien, Joseph A. (1956年5月) [1955年11月15日、1955年6月23日]. 「アナログ-デジタル変換器のための巡回10進コード」.アメリカ電気学会論文集、第1部:通信とエレクトロニクス. 75 (2). ベル電話研究所、米国ニュージャージー州ウィッパニー:120–122 . doi :10.1109/TCE.1956.6372498. ISSN  0097-2452. S2CID  51657314. 論文56-21. 2020年5月18日時点のオリジナルからアーカイブ2020年5月18日閲覧(3ページ)(注:この論文は、1956年1月30日から1956年2月3日に米国ニューヨークで開催されたAIEE冬季総会での発表のために準備されました。)
  33. ^ ab Tompkins, Howard E. (1956年9月) [1956-07-16]. 「2トラック整流のための単位距離2進10進コード」. IRE Transactions on Electronic Computers . 書簡. EC-5 (3).ムーア電気工学部ペンシルバニア大学、フィラデルフィア、ペンシルバニア州、米国: 139. doi :10.1109/TEC.1956.5219934. ISSN  0367-9950. 2020年5月18日時点のオリジナルよりアーカイブ。 2020年5月18日閲覧(1ページ)
  34. ^ リッペル、ベルンハルト(1955年12月)。「アナログからデジタルへの変換のための10進コード」IRE Transactions on Electronic Computers . EC-4 (4): 158–159 . doi :10.1109/TEC.1955.5219487. ISSN  0367-9950(2ページ)
  35. ^ abc サスキンド、アルフレッド・クリス; ウォード、ジョン・アーウィン (1958-03-28) [1957, 1956]. 「III.F. 単位距離符号 / VI.E.2. 反射型バイナリ符号」。米国マサチューセッツ州ケンブリッジで執筆。サスキンド、アルフレッド・クリス(編).アナログ-デジタル変換技術に関する注記。科学技術工学技術図書。第1巻(第3版)。米国ニューヨーク:マサチューセッツ工科大学テクノロジー・プレス/ジョン・ワイリー・アンド・サンズ社/チャップマン・アンド・ホール社。pp . 3-7–3-8 [3-7], 3-10–3-16 [3-13–3-16], 6-65–6-60 [6-60](x+416+2 ページ) (注: 本書の内容は、もともとMIT電気工学科サーボ機構研究所のスタッフが1956 年と 1957 年に開催された特別夏季プログラムのために作成したものです。Susskind が実際にその著作の中で「読み取り型コード」として提示したコードは、ここではコード タイプ II として示されていますが、タイプ I コードは対称性を示すために上位 2 つのビット列を入れ替えたマイナー派生です。)
  36. ^ ab Yuen, Chun-Kwong (1977年12月). 「10進数の新しい表現」 . IEEE Transactions on Computers . C-26 (12): 1286– 1288. doi :10.1109/TC.1977.1674792. S2CID  40879271. 2020年8月8日時点のオリジナルよりアーカイブ2020年8月8日閲覧
  37. ^ Lucal, Harold M. (1959年12月). 「修正反射バイナリを用いたデジタルコンピュータの算術演算」. IRE Transactions on Electronic Computers . EC-8 (4): 449– 458. doi :10.1109/TEC.1959.5222057. ISSN  0367-9950. S2CID  206673385. (10ページ)
  38. ^ Dewar, Robert Berriedale Keith ; Smosna, Matthew (1990).マイクロプロセッサ - プログラマの視点(第1版).クーラント研究所ニューヨーク大学、ニューヨーク、米国:McGraw-Hill Publishing Company . 14ページ. ISBN 0-07-016638-2 . LCCN  89-77320.(18+462ページ)
  39. ^ 「第8章:10進命令」。IBM System/370 Principles of Operation。IBM1980年3月。
  40. ^ 「第3章:データ表現」。PDP -11アーキテクチャー・ハンドブック。Digital Equipment Corporation。1983年。
  41. ^ ab VAX-11アーキテクチャー・ハンドブック. Digital Equipment Corporation . 1985.
  42. ^ 「ILE RPGリファレンス」.
  43. ^ 「IBM 1401/1440/1460/1410/7010 文字コード表(BCD順)」(PDF) .
  44. ^ 「6502命令セット」。2018年5月8日時点のオリジナルよりアーカイブ。
  45. ^ 「NMOS 6502オペコード」。2016年1月14日時点のオリジナルよりアーカイブ
  46. ^ 「68000の命令セット」(PDF) 。 2023年11月20日にオリジナルからアーカイブ(PDF)2023年11月21日閲覧。(58ページ)
  47. ^ Intel 64およびIA-32アーキテクチャ ソフトウェア開発者マニュアル 第1巻:基本アーキテクチャ(PDF) 。Intel。2013年3月。セクション4.7。 2013年4月2日にオリジナルからアーカイブ(PDF) 。 2013年4月23日閲覧
  48. ^ 「4.7 BCDおよびパックBCD整数」。Intel 64およびIA-32アーキテクチャ ソフトウェア開発者マニュアル 第1巻:基本アーキテクチャ(PDF)。バージョン072。第1巻。Intel Corporation。2020年5月27日 [1997] pp.  3– 2, 4-9–4-11 [4-10]。253665-072US。2020年8月6日にオリジナルからアーカイブ(PDF)2020年8月6日に取得。p. 4-10: […]汎用レジスタでBCD整数を操作する場合、BCD値はアンパック(1バイトあたり1つのBCD桁)またはパック(1バイトあたり2つのBCD桁)できます。アンパックBCD整数の値は、下位ハーフバイト(ビット0〜3)の2進値です。上位ハーフバイト(ビット4〜7)は、加算と減算中は任意の値にできますが、乗算と除算中はゼロでなければなりません。パックBCD整数では、1バイトに2つのBCD桁を含めることができます。ここでは、上位ハーフバイトの桁が下位ハーフバイトの桁よりも重要になります。 […] x87 FPUデータ レジスタで BCD 整数を操作する場合、BCD 値は 80 ビット形式にパックされ、10 進整数と呼ばれます。この形式では、最初の 9 バイトに 18 桁の BCD 桁 (1 バイトあたり 2 桁) が含まれます。最下位桁はバイト 0 の下位ハーフバイトに含まれ、最上位桁はバイト 9 の上位ハーフバイトに含まれます。バイト 10 の最上位ビットには符号ビットが含まれます(0 = 正、1 = 負。バイト 10 のビット 0 から 6 はdon't careビットです)。負の 10 進整数は2 の補数形式では格納されません。負の 10 進整数と区別されるのは符号ビットのみです。この形式でエンコードできる 10 進整数の範囲は、-10 18 + 1 から 10 18 − 1 です。10 進整数形式はメモリ内にのみ存在します。 x87 FPUデータレジスタに10進整数がロードされると、自動的に拡張倍精度浮動小数点形式に変換されます。すべての10進整数は、拡張倍精度形式で正確に表現できます。[…] [13]
  49. ^ Jones, Douglas W. (2015-11-25) [1999]. 「BCD算術チュートリアル」.算術チュートリアル. アイオワ州アイオワシティ、米国:アイオワ大学、コンピュータサイエンス学部. 2016年1月3日閲覧.
  50. ^ アリカンテ大学. 「高性能小数計算のためのCORDICベースアーキテクチャ」(PDF) . IEEE . 2010年1月5日時点のオリジナルからアーカイブ(PDF) . 2015年8月15日閲覧.
  51. ^ 「丸めによる選択に基づく小数CORDIC回転:アルゴリズムとアーキテクチャ」(PDF) .英国コンピュータ協会. 2022年10月9日時点のオリジナルからアーカイブ(PDF) . 2015年8月14日閲覧
  52. ^ Mathur, Aditya P. (1989). マイクロプロセッサ入門(第3版). Tata McGraw-Hill Publishing Company Limited . ISBN 978-0-07-460222-5
  53. ^ 3GPP TS 29.002: モバイルアプリケーション部(MAP)仕様(技術レポート). 2013. sec. 17.7.8 共通データ型
  54. ^ 「シグナリングプロトコルおよびスイッチング(SPS)通信アプリケーションプロトコルにおける抽象構文記法1(ASN.1)の使用に関するガイドライン」(PDF)。p. 15。2013年12月4日にオリジナルからアーカイブ(PDF) 。
  55. ^ 「XOMモバイルアプリケーション部(XMAP)仕様」(PDF) 。p. 93。 2015年2月21日にオリジナルからアーカイブ(PDF)。 2013年6月27日閲覧
  56. ^ 「5Gシステム(5GS)の非アクセス層(NAS)プロトコル;ステージ3。(3GPP TS 24.501 バージョン16.10.0 リリース16)TS 24.501 リリース16.10.0」(PDF)。ETSIおよび3GPP 。2022年2月17日時点のオリジナルからアーカイブ(PDF)2022年2月26日閲覧(TS 24.501)
  57. ^ 「デジタルセルラー電気通信システム(フェーズ2+)(GSM)、ユニバーサルモバイル電気通信システム(UMTS)、LTE、5G、番号、アドレス、識別(3GPP TS 23.003 バージョン16.8.0 リリース16)」(PDF)。ETSIおよび3GPP 。2022年226日時点のオリジナルからアーカイブ(PDF)2022年2月26日閲覧(TS 23.003)
  58. ^ 「IBM PCのタイマーカウンタ回路」(PDF) www.se.ecu.edu.au。2008年10月10日にオリジナル(PDF)からアーカイブ。 2022年5月22日閲覧(7ページ)
  59. ^ MC6818 データシート
  60. ^ Gottschalk v. Benson409 U.S. 63, 72 (1972)

参考文献

  • Mackenzie, Charles E. (1980). Coded Character Sets, History and Development (PDF) . The Systems Programming Series (1 ed.). Addison-Wesley Publishing Company, Inc. ISBN 978-0-201-14460-4 LCCN  77-90165. 2016年5月26日時点のオリジナルからのアーカイブ( PDF ) . 2019年8月25日閲覧.
  • Richards, Richard Kohler (1955). Arithmetic Operations in Digital Computers . New York, USA: van Nostrand . pp. 397–.
  • Schmid, Hermann (1974). Decimal Computation (1 ed.). Binghamton, New York, USA: John Wiley & Sons . ISBN 0-471-76180-X Schmid, Hermann (1983) [1974]. Decimal Computation (1 (reprint) ed.). Malabar, Florida, USA: Robert E. Krieger Publishing Company. ISBN 0-89874-318-4(注:クリーガー復刻版の少なくとも一部のロットには、115~146ページに欠陥のある誤植がありました。)
  • Massalin, Henry (1987年10月). Katz, Randy (編). "Superoptimizer: A look at the smallest program" (PDF) . ACM SIGOPS Operating Systems Review . 21 (4): 122– 126. doi :10.1145/36204.36194. ISBN  0-8186-0805-62017年7月4日にオリジナルからアーカイブ(PDF) 。 2012年4月25日閲覧(また:ACM SIGPLAN Notices、Vol. 22 #10、IEEE Computer Society Press #87CH2440-6、1987年10月)
    • 「GNU Superoptimizer」。HP -UX
  • Shirazi, Behrooz; Yun, David YY; Zhang, Chang N. (1988年3月).冗長2進化10進加算のためのVLSI設計. IEEE 第7回国際フェニックスコンピュータと通信会議, 1988. IEEE . pp.  52–56 .
  • Brown; Vranesic (2003).デジタル論理の基礎
  • Thapliyal, Himanshu; Arabnia, Hamid R. (2006年11月). CMOSと可逆ロジック実装による修正キャリールックアヘッドBCD加算器.2006年国際コンピュータ設計会議 (CDES'06) の議事録.CSREA Press.pp.  64– 69. ISBN 1-60132-009-4
  • Kaivani, A.; Alhosseini, A. Zaker; Gorgin, S.; Fazlali, M. (2006年12月). IEEE-754Rを用いた高密度10進数と2進化10進数形式間のコンバータの可逆実装.9回国際情報技術会議 (ICIT'06). IEEE.pp. 273–  276
  • Cowlishaw, Mike F. (2009) [2002, 2008]. 「10進演算に関する資料の参考文献 - カテゴリ別」。一般10進演算。IBM 。 2016年1月2日閲覧
  • Cowlishaw, Mike F. (2014) [2000]. 「Chen-Ho 10進データエンコーディングの概要」。一般10進演算。IBM 2016年1月2閲覧
  • Cowlishaw, Mike F. (2007) [2000]. 「高密度パック10進符号化の概要」.一般10進演算. IBM . 2016年1月2日取得.
  • BCDを10進数、2進数、16進数に変換し、その逆も行います
  • Java用BCD
Retrieved from "https://en.wikipedia.org/w/index.php?title=Binary-coded_decimal&oldid=1307725006"