2進化10進数

バイナリ時計では、 LEDを使って2進数の値を表すことがあります。この時計では、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]と呼ばれることもある(通常、これらを保持するために必要なニブルもテトラドと呼ばれる)。一方、使われない、don't care状態は擬似テトラド[de][4] [5] [6] [7] [8] 擬似10進数[3]または擬似10進数と呼ばれる[9] [10] [注 1]

BCDの主な利点は、2進位置システムと比較して、10進数の表現と丸め精度が高く、従来の人間が読める表現への変換が容易なことです。主な欠点は、基本的な演算を実装するために必要な回路の複雑さが若干増加することと、記憶密度が若干低いことです。

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

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

背景

BCDは、10進数の任意の1桁を4ビットのパターンで表現できるという特性を利用します。数字をエンコードする最も分かりやすい方法は、自然BCD(NBCD)です。この方法では、各10進数は対応する4ビットの2進値で表現されます(下表参照)。これは「8421」エンコードとも呼ばれます。

小数点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コードと擬似テトラード
少し重さ 0 1 2 3 4 5 6 7 8 9101112131415        コメント        
480000000011111111バイナリ
340000111100001111
220011001100110011
110101010101010101
名前0123456789101112131415小数点
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 (私)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]
オブライエン1世(ワッツ)0132  4 9867  5 [32] [14] [16] [17] [注6]
5環式0132  4 5687  9 [28]
トンプキンス1世0132  4  9  8756[33] [14] [16] [17]
リッペル0123  4  9  8765[34] [35] [14]
オブライエン2世 0214 3  9785 6 [32] [14] [16] [17]
トンプキンス II  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]
カウツ1世0  2 513 79 86 4[18]
カウツ II 94 1 328 67 05 [18] [14]
ズスキンド1世 0 1 432 9 85 67[35]
ズスキント2世 0 1 9 84 325 67[35]
 0123456789101112131415

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

 
BCD
8 4 2 1
スティビッツ コードまたはエクセス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 バイトのバイナリ パターンが生成されます。

小数点: 9 12進数: 0000 1001 0000 0001

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

小数点: 9 1バイナリ: 1001 0001

したがって、1 つのアンパック BCD バイトの数値範囲は 0 から 9 までですが、1 つのパック BCD バイトの範囲は 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

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

例えば、4バイトの値は8ニブルで構成され、上位7ニブルは7桁の10進数値の桁を格納し、最下位ニブルは10進整数値の符号を示します。標準的な符号値は、正(+)の場合は1100(16進数C )、負(-)の場合は1101(16進数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
サイン注記
1 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) バイトのストレージスペース。

例えば、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,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進数

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

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

12 34 56 7C 12 34.56 7+

パックBCD形式では小数点がメモリに格納されないため、小数点は実際にはメモリに格納されません。小数点の位置はコンパイラによって認識され、生成されたコードは様々な算術演算においてそれに応じて動作します。

高密度エンコーディング

10進数の1桁に4ビットが必要な場合、3桁の10進数には12ビットが必要です。しかし、2の10乗(1,024)は10の3乗(1,000)より大きいため、3桁の10進数をまとめてエンコードする場合、必要なビット数は10ビットのみです。このようなエンコード方式として、Chen-Hoエンコード高密度10進数(DPD)があります。後者の利点は、エンコードのサブセットによって、通常の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歳以上C1A1E1F1~(*) 1
2歳以上C2A2E2F2BsS2
3歳以上C3A3E3F3CtT3
4歳以上C4A4E4F4Dあなたあなた4
5歳以上C5A5E5F5EvV5
6歳以上C6A6E6F6FW6
7歳以上C7A7E7F7G×X7
8歳以上C8A8E8F8Hyはい8
9歳以上C9A9E9F9zZ9
0−D0B0  } (*)^(*)  
1−D1B1  J   
2−D2B2  K   
3−D3B3  L   
4−D4B4  M   
5−D5B5     
6−D6B6     
7−D7B7  P   
8−D8B8  質問   
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桁の単純な加算をBCDに変換するには、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進数には収まりきりません。BCDでは、10進数と同様に、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(Decimal Adjust Accumulator)オペコードを提供しています。

減算

減算は、被減数減数の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進数表現の一種であるため、上記の数字の合計の中には無効なものがいくつかあります。無効なエントリ(BCDの数字が1001より大きい)が存在する場合、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の補数を取るか減算する前に、桁数の少ない方の数値の前にゼロを付ける必要がある。したがって、1053 − 2の場合、まず2をBCDで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)としてエンコードされます。これにより、パンチカード形式と内部記憶形式間の変換回路は、いくつかの特殊なケースを除いて非常にシンプルになります。重要な特殊なケースの一つは数字0で、カードでは0 が1つだけパンチされ、コアメモリでは(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ではなく、5桁中2桁のコードを使用)を使用してエンコードされ、左の数字が「ゾーン」、右の数字が「数字」となります。入出力変換ハードウェアは、内部の数字ペアと外部の標準6ビットBCDコードの間で変換を行います。

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

IBM 1130および1800では、パック BCD は IBM の Commercial Subroutine Package によってソフトウェアでサポートされています。

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

その他のコンピューター

デジタル・イクイップメント・コーポレーションの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 数値データは商用および金融アプリケーションでは依然として非常に一般的です。

パックBCDとゾーン10進数の加減算演算を、短いながらも理解しにくいワード並列ロジックと2進算術演算のシーケンスを使用して実装するためのトリックがあります。[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]

純粋なバイナリとの比較

利点

デメリット

  • 実際のBCDの実装では、ネイティブBCD操作に対するプロセッサのサポートが限られているため、特に組み込みシステムでは、バイナリ表現の操作よりも遅くなるのが一般的です。[52]
  • 一部の演算は実装がより複雑です。加算器は、ラップして早期に桁上げを生成するための追加ロジックを必要とします。また、BCD加算では、純粋なバイナリと比較して15~20%多くの回路が必要になります。[要出典]乗算には、シフトマスク加算よりもやや複雑なアルゴリズム(バイナリ乗算、つまり桁ごとまたは桁グループごとのバイナリシフトと加算、あるいはそれに相当する処理が必要)を使用する必要があります。
  • 標準BCDでは1桁あたり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]これは電話のキーパッド設計に似ています。

小数点
未定
8 4 2 1
*1 0 1 0
#1 0 1 1
1つの1 1 0 0
b1 1 0 1
c1 1 1 0
桁数が奇数の場合の穴埋めとして使用される1 1 1 1

前述の3GPPドキュメントでは、各バイトのニブルを入れ替えたTBCD-STRINGを定義しています。ビット、オクテット、数字は1から始まり、ビットは右から、数字とオクテットは左からインデックスされます。

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

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

意味番号は123421 43TBCD では次のようになります。

このフォーマットは現代の携帯電話でダイヤル番号の送信に使用されているほか、オペレータ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 年のゴットシャルク対ベンソン事件で米国最高裁判所は、 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は、ワッツコードまたはワッツ反射十進数(WRD)コードとも呼ばれます。
  7. ^ Excess -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 クラー、ライナー (1970-02-01)。 「1.5.3 Konvertierung binär verschlüsselter Dezimalzahlen」 [1.5.3 2 進化 10 進数の変換]。 Digitale Rechenautomaten – Eine Einführung [デジタル コンピューター – 概要]。ザムルング・ゲッシェン(ドイツ語)。 Vol. 1241/1241a (第 1 版)。ベルリン、ドイツ: Walter de Gruyter & Co. / GJ Göschen'sche Verlagsbuchhandlung  [de]。 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 クラー、ライナー (1989) [1988-10-01]. 「1.4 コード: Binär verschlüsselte Dezimalzahlen」 [1.4 コード: 2 進化 10 進数]。Digitale Rechenautomaten – Eine Einführung in die Struktur von Computerhardware [デジタル コンピュータ – コンピュータ ハードウェアの構造の概要]。ザムルング・ゲッシェン(ドイツ語)。 Vol. 2050年(第4次再編集版)。ベルリン、ドイツ: Walter de Gruyter & Co.、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.オルデンブール・フェルラーク・ミュンヘン・ウィーン。ISBN 3-486-22662-2
  5. ^ ターフェル、ハンス・イェルク (1971)。Einführung in die digitale Datenverarbeitung [デジタル情報処理入門] (ドイツ語)。ミュンヘン:カール・ハンザー・フェルラークISBN 3-446-10569-7
  6. ^ カール・W・シュタインブーフ;ウェーバー、ヴォルフガング。ハイネマン、トラウテ編。 (1974年)[1967年]。Taschenbuch der Informatik - Band II - EDV システムの構造とプログラム。 Taschenbuch der Nachrichtenverarbeitung (ドイツ語)。 Vol. 2 (第 3 版)。ベルリン、ドイツ: Springer-VerlagISBN 3-540-06241-6LCCN  73-80607。
  7. ^ ティーツェ、ウルリッヒ;シェンク、クリストフ (2012-12-06)。高度な電子回路。シュプリンガーサイエンス&ビジネスメディアISBN 978-3642812415. 9783642812415 . 2015年8月5日閲覧。
  8. ^ Kowalski, Emil (2013-03-08) [1970]. 核エレクトロニクス. Springer-Verlag . doi :10.1007/978-3-642-87663-9. ISBN 978-3642876639. 9783642876639, 978-3-642-87664-6 . 2015年8月5日閲覧。
  9. ^ フェレッティ、ヴィットリオ (2013-03-13)。 Wörterbuch der Elektronik、Datentechnik und Telekommunikation / エレクトロニクス、コンピューティング、電気通信辞典: Teil 1: ドイツ語-英語 / パート 1: ドイツ語-英語。 Vol. 1 (第 2 版)。スプリンガー・フェルラーク。ISBN 978-3642980886. 9783642980886 . 2015年8月5日閲覧。
  10. ^ シュパイザー、アンブロシウス・ポール(1965) [1961]. Digitale Rechenanlagen - Grundlagen / Schaltungstechnik / Arbeitsweise / Betriebssicherheit [デジタル コンピュータ - 基本 / 回路 / 動作 / 信頼性] (ドイツ語) (2 版)。ETH Zürich、チューリッヒ、スイス: Springer-Verlag / IBM。 p. 209.LCCN 65-14624  。 0978年。
  11. ^ Cowlishaw, Mike F. (2015) [1981, 2008]. 「一般小数点演算」 . 2016年1月2日閲覧
  12. ^ エヴァンス、デイヴィッド・シルベスター(1961年3月)「第4章 補助機器:デジタイザ用出力駆動リレーとパリティチェックリレー」『デジタルデータ:解析とプロセス制御のための導出と縮約』(第1版)ロンドン、英国:ヒルガー&ワッツ社インターサイエンス出版社。pp. 46–64 [56–57] 。 2020年5月24日閲覧(8+82 ページ) (注:結果として得られる 5 ビット コードの奇数パリティを実現するために最下位ビットとして追加のパリティ ビットが適用された 4 ビット 8421 BCD コードは、フェランティ コードとも呼ばれます。)
  13. ^ Lala, Parag K. (2007). 『現代デジタルデザインの原則』John Wiley & Sons . pp.  20– 25. ISBN 978-0-470-07296-7
  14. ^ abcdefghijklmn ベルガー、エーリッヒ R. (1962)。 「1.3.3. ザーレンの死」。ドイツのカールスルーエで書かれました。 Steinbuch 、カール W. (編)。Taschenbuch der Nachrichtenverarbeitung (ドイツ語) (第 1 版)。ベルリン / ゲッティンゲン / ニューヨーク: Springer-Verlag OHG68 ~ 75ページ。LCCN  62-14511  。(注: 示されている Kautz コード (II) は、奇数カウントの 1 を持つ 8 つのバイナリ状態すべてを含み、偶数カウントの 1 を持つ 8 つの状態すべてを含む元の Kautz コード (I) をわずかに変更したもので、最上位ビットを反転すると9 の補数が作成されます。)
  15. ^ abcdef ケメラー、ヴィルヘルム[ドイ​​ツ語] (1969 年 5 月)。 「II.15. Struktur: Informationsdarstellung im Automaten」。ドイツのイエナで書かれました。フリューハウフでは、ハンス[ドイツ語で] ;ケメラー、ヴィルヘルム。シュレーダー、クルツ。ウィンクラー、ヘルムート (編)。 Digitale Automaten – 理論、構造、技術、プログラム。 Elektronisches Rechnen und Regeln (ドイツ語)。 Vol. 5 (1 版)。ベルリン、ドイツ: Akademie-Verlag GmbH。 p. 161. ライセンス番号202-100/416/69。注文番号4666ES20K3.(注: 1973 年の第 2 版も存在します。)
  16. ^ abcdefghijklmnopq ドクター、フォルケルト;シュタインハウアー、ユルゲン (1973-06-18)。デジタルエレクトロニクス。 Philips Technical Library (PTL) / Macmillan Education (英語第 1 版の再版)。オランダ、アイントホーフェン: The Macmillan Press Ltd. / NV Philips の Gloeilampenfabrieken土井:10.1007/978-1-349-01417-0。ISBN 978-1-349-01419-4. SBN 333-13360-9. 2020年7月16日時点のオリジナルよりアーカイブ2020年5月11日閲覧。(270 ページ)(注:これは、2 巻からなるドイツ語版の第 1 巻の翻訳に基づいています。)
  17. ^ abcdefghijklmnopq ドクター、フォルケルト;スタインハウアー、ユルゲン (1975) [1969]。Digitale Elektronik in der Meßtechnik und Datenverarbeitung: Theoretische Grundlagen und Schaltungstechnik。フィリップス・ファッハビュッヒャー(ドイツ語)。 Vol. I (改良および拡張された第 5 版)。ハンブルク、ドイツ: Deutsche Philips GmbH。 p. 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つ(ここではコードIとして再現)のみを4ビットグラフの形で明示的に示し、さらに16状態の4ビット「アナログデータ用バイナリコード」をコードテーブルの形で示していますが、これについてはここでは説明しません。ここに示すコードIIは、Bergerが説明したコードIの修正版です。)
  19. ^ abc ジャン・P・チナル(1973年1月)「コード」。パリ(フランス)で執筆。デジタルシステムの設計手法。アラン・プレストン、アーサー・サマー訳(英語版第1版)。ベルリン(ドイツ):アカデミー・フェアラークシュプリンガー・フェアラーク。p. 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月21日閲覧.(xviii+506 ページ) (注意。1967 年のフランス語の原書は「Techniques Booléennes et Calculateurs Arithmétiques」という名前で、Éditions Dunod  [fr]から出版されました。)
  20. ^ ab 軍事ハンドブック:エンコーダ - シャフト角度からデジタル化(PDF) .米国国防総省. 1991年9月30日. MIL-HDBK-231A. 2020年7月25日時点のオリジナルよりアーカイブ(PDF) . 2020年7月25日閲覧(注: MIL-HDBK-231(AS) (1970-07-01) に取って代わります。)
  21. ^ ab ストッパー、ハーバート (1960 年 3 月)。ドイツのリッツェルシュテッテンで書かれました。ルンゲ、ヴィルヘルム・トルメ(編)。 "Ermittlung des Codes und der logischen Schaltung einer Zähldekade"。Telefunken-Zeitung (TZ) - Technisch-Wissenschaftliche Mitpeilungen der Telefunken GMBH (ドイツ語)。33(127)。ベルリン、ドイツ:テレフンケン: 13–19(7ページ)
  22. ^ ab ボルッキ、ローレンツ;ディットマン、ヨアヒム (1971) [1970 年 7 月、1966 年、1965 年秋]。 「2.3 デジタル技術における翻訳コード」。ドイツ、カールスルーエのクレーフェルトで執筆。Digitale Meßtechnik: Eine Einführung (ドイツ語) (第 2 版)。ベルリン / ハイデルベルク、ドイツ: Springer-Verlag。 10–23 ページ [12–14]。土井:10.1007/978-3-642-80560-8。ISBN 3-540-05058-2LCCN 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. ^ ポール、マティアス R. (1995-08-10) [1994]. 「Unterbrechungsfreier Schleifencode」[連続ループコード]。 1.02 (ドイツ語) 2008 年 2 月 11 日に取得(注: 筆者はこのコードをSchleifencode (英語: loop code) と呼んでいます。これは、Gray 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)。Dun -Donnelley Publishing Corporation、 Dun & Bradstreet Corp.傘下Technical Publishing Company87–91。ISSN 0010-8049  。(5ページ)
  28. ^ ab Ledley, Robert Steven ; Rotolo, Louis S. ; Wilson, James Bruce (1960). 「第4部 デジタルコンピュータ回路の論理設計; 第15章 シリアル算術演算; 第15章-7 追加トピック」 デジタルコンピュータと制御工学(PDF) . McGraw-Hill 電気電子工学シリーズ (第1版). ニューヨーク, USA: McGraw-Hill Book Company, Inc. (印刷: The Maple Press Company, York, Pennsylvania, USA). pp.  517– 518. ISBN 0-07036981-XISSN  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月)「巡回進行型2進化10進数による数値表現システム(技術ノートMS15)」英国ファーンバラ:王立航空研究所(RAE)。(4 ページ) (注:数値を表す巡回コード化 2 進化 10 進数システムと呼ばれることもあります。)
  31. ^ ペザリック、エドワード・ジョン、ホプキンス、AJ (1958).シャフトの回転を符号化するための最近開発されたデジタル装置(技術ノートMS21). ファーンバラ、英国:王立航空機研究所(RAE).
  32. ^ ab O'Brien, Joseph A. (1956年5月) [1955年11月15日, 1955年6月23日]. 「アナログ・デジタル変換器用巡回10進コード」. Transactions of the American Institute of Electrical Engineers, Part I: Communication and Electronics . 75 (2). Bell Telephone Laboratories, Whippany, New Jersey, USA: 120– 122. doi :10.1109/TCE.1956.6372498. ISSN  0097-2452. S2CID  51657314. Paper 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. ^ Lippel, Bernhard (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 Susskind, Alfred Kriss; Ward, John Erwin (1958-03-28) [1957, 1956]. 「III.F. 単位距離符号 / VI.E.2. 反射バイナリ符号」。米国マサチューセッツ州ケンブリッジで執筆。Susskind, Alfred Kriss (編)アナログ-デジタル変換技術に関する注記。科学技術書、第1巻(第3版)。米国ニューヨーク:マサチューセッツ工科大学テクノロジー・プレス/ John Wiley & Sons, Inc. / Chapman & Hall, Ltd. 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). Microprocessors - A Programmer's View (第1版). Courant Institute , New York University , New York, USA: McGraw-Hill Publishing Company . p. 14. ISBN 0-07-016638-2LCCN  89-77320。(18+462ページ)
  39. ^ 「第8章 10進命令」IBM System/370 動作原理. IBM . 1980年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) は、加算と減算では任意の値を取ることができますが、乗算と除算では 0 でなければなりません。パックされた BCD 整数では、1 バイトに 2 つの BCD 桁を含めることができます。この場合、上位ハーフバイトの桁は、下位ハーフバイトの桁よりも重要になります。 […] x87 FPUデータ レジスタで BCD 整数を操作する場合、BCD 値は 80 ビット形式にパックされ、10 進整数と呼ばれます。この形式では、最初の 9 バイトに 18 桁の BCD 桁 (1 バイトあたり 2 桁) が含まれます。最下位桁はバイト 0 の下位ハーフバイトに含まれ、最上位桁はバイト 9 の上位ハーフバイトに含まれます。バイト 10 の最上位ビットには、符号ビット(0 = 正、1 = 負、バイト 10 のビット 0 から 6 は任意ビット) が含まれます。負の10進整数は2の補数形式では保存されません。正の10進整数とは符号ビットによってのみ区別されます。この形式でエンコードできる10進整数の範囲は、-10 18 + 1 から 10 18 − 1 です。10進整数形式はメモリ内にのみ存在します。10進整数がx87 FPUデータレジスタにロードされると、自動的に拡張倍精度浮動小数点形式に変換されます。すべての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. ^ 「丸めによる選択に基づく10進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年。第17.7.8節「共通データ型」。
  54. ^ 「Signalling Protocols and Switching (SPS) Guidelines for using Abstract Syntax Notation One (ASN.1) in telecommunication application protocols」(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)。ETSI3GPP 。2022年217日時点のオリジナルからアーカイブ(PDF) 。 2022年2月26日閲覧(TS 24.501)
  57. ^ 「デジタルセルラー通信システム(フェーズ2+)(GSM)、ユニバーサルモバイル通信システム(UMTS)、LTE、5G、番号、アドレス、識別(3GPP TS 23.003 バージョン16.8.0 リリース16)」(PDF)。ETSI3GPP 。2022年226日時点のオリジナルからアーカイブ(PDF) 。 2022年2月26日閲覧(TS 23.003)
  58. ^ 「IBM PCのタイマーカウンター回路」(PDF)www.se.ecu.edu.au2008年10月10日時点のオリジナル(PDF)からアーカイブ。 2022年5月22日閲覧(7ページ)
  59. ^ MC6818 データシート
  60. ^ ゴットシャルク対ベンソン事件409 U.S. 63, 72 (1972)。

さらに読む

  • マッケンジー、チャールズ・E. (1980). コード化文字セットの歴史と発展(PDF) . システムプログラミングシリーズ (第1版). Addison-Wesley Publishing Company, Inc. ISBN 978-0-201-14460-4LCCN  77-90165. 2016年5月26日時点のオリジナルよりアーカイブPDF ) 。 2019年8月25日閲覧
  • リチャーズ、リチャード・コーラー (1955). 『デジタルコンピュータにおける算術演算』 ニューヨーク、アメリカ合衆国:ヴァン・ノストランドpp. 397–.
  • シュミット、ヘルマン(1974年)『小数計算』 (第1版)ジョン・ワイリー・アンド・サンズ、ニューヨーク州ビンガムトンISBN 0-471-76180-XSchmid , Hermann (1983) [1974]. Decimal Computation (第1版(再版)). マラバー, フロリダ, USA: Robert E. Krieger Publishing Company. ISBN 0-89874-318-4(注: クリーガーの再版の少なくとも一部のバッチには、 115 ~ 146 ページに欠陥のある誤植がありました。)
  • マッサリン、ヘンリー(1987年10月).カッツ、ランディ(編). 「スーパーオプティマイザー:最小のプログラムについて」(PDF) . ACM SIGOPS オペレーティングシステムレビュー. 21 (4): 122– 126. doi :10.1145/36204.36194. ISBN 0-8186-0805-6. 2017年7月4日にオリジナルからアーカイブ(PDF)されました2012年4月25日閲覧。(また、ACM SIGPLAN Notices、Vol. 22 #10、IEEE Computer Society Press #87CH2440-6、1987年10月)
    • 「GNU スーパーオプティマイザー」。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]. 「十進演算に関する資料の参考文献 - カテゴリ別」.一般十進演算. 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=1324432850"