文書の過去の版を表示しています。
008.BCD(二進化十進数)
Binary-coded decimal の略。2進数4ビットで10進数の0~9を扱う方式・方法。
BCD
1920年あたりには自然発生していた考え方で、複数のハードウエアメーカーが採用していた。 普及させたのはIBMと言われている。1950年台は十進数の計算機構をもつ計算機が主流だった。
二進化十進数にはゾーン形式とパック形式(パックドデシマル形式)があり、ゾーン形式は1バイトで1桁、パック形式は1バイトで2桁を表す。
1964年にIBMが数字以外の文字も含めて体系化したEBCDICを発表しこれが事実上の標準となった。
BCDを利用すると二進数で扱いが厳しい値を扱う事が出来る。
一般的に知られているが、二進数では #6 の値(10進数の 0.1)を表現できない。近似値にするしかないので、#6 の例だと近似値 0.0625 になってしまう。
小数点以下を8bitにして計算を行っても 0.09765625 である。
BCDであれば二進数での問題を回避できる。
ただし表現の話であって演算結果も解決できる訳ではない。
二進化十進数の演算でも 1 ÷ 3 × 3 = 1 にはならないので注意。二進化十進数の演算で全て解決するわけではない。
パック形式、小数点以下1位の符号なしの値で比較(16進数表記を併記)
| # | 10進数 | 2進数(12bit表記) | 2進化10進数(3桁) |
|---|---|---|---|
| 1 | 16.0 | 0001 0000.0000 0x10.0 | 0001 0110.0000 0x16.0 |
| 2 | 10.0 | 0000 1010.0000 0x0A.0 | 0001 0000.0000 0x10.0 |
| 3 | 5.0 | 0000 0101.0000 0x05.0 | 0000 0101.0000 0x05.0 |
| 4 | 1.0 | 0000 0001.0000 0x01.0 | 0000 0001.0000 0x01.0 |
| 5 | 0.5 | 0000 0000.1000 0x00.8 | 0000 0000.0101 0x00.5 |
| 6 | 0.1 | * 0000 0000.0001 0x00.1 | 0000 0000.0001 0x00.1 |
| 7 | 0.0 | 0000 0000.0000 0x00.0 | 0000 0000.0000 0x00.0 |
2進数の小数点以下を8桁に拡張。
| 10進数 | 2進数 |
|---|---|
| 1.00000000 | 1.00000000 |
| 0.50000000 | 0.10000000 |
| 0.25000000 | 0.01000000 |
| 0.12500000 | 0.00100000 |
| 0.06250000 | 0.00010000 |
| 0.03125000 | 0.00001000 |
| 0.01562500 | 0.00000100 |
| 0.00781250 | 0.00000010 |
| 0.00390625 | 0.00000001 |
0.06250000 0.00010000 0.03125000 0.00001000 + 0.00390625 + 0.00000001 ------------- --------------- 0.09765625 0.00011001 近似値にしかならない
BCDIC
BCDを体系化したのが BCDICになる。
これは数字以外を扱うため、パンチカードをベースに ゾーン + BCD 4bit を 6bit に拡張し数字以外も扱えるようにしたもの。64種の文字を扱えるようになる。
パンチカードには 12,11,0~9 のゾーンパンチ/数字パンチと呼ぶ行があり、列方向(縦方向)に穿孔した穴の位置組み合わせで文字を表現する。 ゾーンパンチ12,11の組み合わせと、数字パンチ0~9で表す文字を 6bit で表現し直したものが BCDIC となる。
BCDIC はパンチカードの穿孔位置で示す文字と1対1に対応するが、用途やメーカー、システムにより文字の配置が異なる。
以下は IBM 716 printer Fortran character set 。FORTRAN言語のコーディング用で使われたもの。不等号文字がないのは、言語仕様で不等号を表すための記述があるから。
例 A > B → A .GT. B
| ゾーン | 上位 | |||
|---|---|---|---|---|
| 下位 | 0 | 1 | 2 | 3 |
| 0 | * | + | - | 0 |
| 1 | 1 | A | J | / |
| 2 | 2 | B | K | S |
| 3 | 3 | C | L | T |
| 4 | 4 | D | M | U |
| 5 | 5 | E | N | V |
| 6 | 6 | F | O | W |
| 7 | 7 | G | P | X |
| 8 | 8 | H | Q | Y |
| 9 | 9 | I | R | Z |
| A | ||||
| B | = | . | $ | , |
| C | - | ) | * | ( |
| D | ||||
| E | ||||
| F | ||||
EBCDIC
IBMが発表して事実上の標準となったコード体系。BCDICの拡張なのでEBCDICとなる。 101.EBCDICコード表を参照。
コードは 上位ニブル + 下位ニブル で構成され、ゾーン形式では上位ニブルをゾーン部(文字種)、下位ニブルを数字/数値としている。 ただしゾーン別けは厳密では無いようで、せいぜいF,C,Dが共通なくらい。
| ゾーン部 | 2進数 | 意味 | 用途 |
|---|---|---|---|
| F | 1111 | 数字(0〜9) | Zoned Decimal の通常の数字(F1〜F9) |
| C | 1100 | 大文字 A〜I、正の符号 | 最終桁の Cn は “正” を表す |
| D | 1101 | 大文字 J〜R、負の符号 | 最終桁の Dn は “負” を表す |
| E | 1110 | 大文字 S〜Z | アルファベット後半 |
| 8 | 1000 | 小文字 a〜i | 小文字前半 |
| 9 | 1001 | 小文字 j〜r | 小文字中盤 |
| A | 1010 | 小文字 s〜z | 小文字後半 |
| B | 1011 | 記号類 記号・特殊文字 | |
| 7 | 0111 | 記号類 $, # など | |
| 0〜6 | 0000〜0110 | 制御コード | NUL, BEL, CR など |
EBCDICも一部配置が異なる数種類が存在する。以下はカナ拡張 CP290。
| 上位桁 | |||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | ||
| 下位桁 | 0 | NUL | DLE | DS | SP | & | - | [ | ] | ソ | ~ | ^ | { | } | $ | 0 | |
| 1 | SOH | DC1 | SOS | 。 | ェ | / | i | ア | タ | ¯ | ¢ | A | J | € | 1 | ||
| 2 | STX | DC2 | FS | SYN | 「 | ォ | a | j | イ | チ | ヘ | \ | B | K | S | 2 | |
| 3 | ETX | DC3 | WUS | IR | 」 | ャ | b | k | ウ | ツ | ホ | t | C | L | T | 3 | |
| 4 | SEL | RES/ENP | BYP/INP | PP | 、 | ュ | c | l | エ | テ | マ | u | D | M | U | 4 | |
| 5 | HT | NL | LF | TRN | ・ | ョ | d | m | オ | ト | ミ | v | E | N | V | 5 | |
| 6 | RNL | BS | ETB | NBS | ヲ | ッ | e | n | カ | ナ | ム | w | F | O | W | 6 | |
| 7 | DEL | POC | ESC | EOT | ァ | f | o | キ | ニ | メ | x | G | P | X | 7 | ||
| 8 | GE | CAN | SA | SBS | ィ | ー | g | p | ク | ヌ | モ | y | H | Q | Y | 8 | |
| 9 | SPS | EM | SFE | IT | ゥ | h | ` | ケ | ネ | ヤ | z | I | R | Z | 9 | ||
| A | RPT | UBS | SM/SW | RFF | £ | ! | : | コ | ノ | ユ | レ | ||||||
| B | VT | CU1 | CSP | CU3 | . | ¥ | , | # | q | r | s | ロ | |||||
| C | FF | IFS | MFA | DC4 | < | * | % | @ | サ | ヨ | ワ | ||||||
| D | CR | IGS | ENQ | NAK | ( | ) | _ | ' | シ | ハ | ラ | ン | |||||
| E | SO/LS1 | IRS | ACK | + | ; | > | = | ス | ヒ | リ | ゙ | ||||||
| F | SI/LS0 | IUS/ITB | BEL | SUB | | | ¬ | ? | “ | セ | フ | ル | ゚ | EO | ||||


