B.C.D符号について
B.C.D符号 (Binary Coded decimal code)は*符号体系のひとつで、二進化十進符号とも呼ばれる。
*符号体系:人間界の言葉(10進法)とからコンピュータが理解できる言語(2進法)へと変化する符号化(エンコード)とその逆の操作となる復号化(でコード)のことである。
B.C.D符号の例
まず。記述方法を234(10)==>10進法の234とする。
十進数の各桁を2進数の4ビットで記述。
例えば、
234(10) = 0010 0011 0100 (B.C.D.) と記述できる。(下記に詳細記述)
・2 (10) = 0010 (2)
・3 (10) = 0011 (2)
・4 (10) = 0100 (2)
このとき、1010~1111 (10~15)は不適切表現となる。各桁1桁しか存在しないので…
B.C.D符号の加算アルゴリズム
普通の計算(人間界)
例)684+277 = 961について
684 (10, B.C.D)
+ 277 (10, B.C.D)
--------------------
961 (10, B.C.D) ←Answer!
このひっ算は単なる10進数の人間の数学界における常識的な算術方法である。しかし2進法のコンピュータには理解ができない。では、B.C.Dを用いることによりどのように計算できるか解説する。
コンピュータでの計算方式
10進数の数をそれぞれB.C.Dで書きなおしてみる。
684 (10) = 0110 1000 0100 (B.C.D)
277 (10) = 0010 0111 0111 (B.C.D)
下位4ビット同士の計算から始める。
0100 + 0111
*0100 : 684(10)の4(1の位)を2進数で表したもの
*0111 : 277(10)の7(1の位)を2進数で表したもの
0100
+ 0111
---------
1011
これは、2進法計算によりできる。このとき、__1011 (2) = 11 (10) となってしまい、不適切表現となってしまう__ので、この場合にはさらに、
+6(10) = +0110 (2)
1011
+ 0110
---------
10001 = 1(10)
の加算を行う。 どうしてこの加算を行うかというと、 10~15(1010~1111)に対して、+6(10) = +0110(2)を行うことで、必ず、2進数では4桁から5桁に桁上りがわかる状態となることが明白となる。あくまで、桁上りがするかどうかを見たいので、数字に対しては、影響は持たない。
これを次の桁においても同様のことをする。
1000 + 0111
*1000 : 684(10)の8(10の位)を2進数で表したもの
*0111 : 277(10)の7(10の位)を2進数で表したもの
1000
+ 0111
+ 0001 ←桁上り分
---------
10000
この数字においても10以上の数字を表すので、0110を加算。
10000
+ 0110
---------
10110 = '6' (10)
さらにもう一回。
0110 + 0010
*0110 : 684(10)の6(1の位)を2進数で表したもの
*0010 : 277(10)の2(1の位)を2進数で表したもの
0110
+ 0010
+ 0001
---------
1001 = '9' (10)
桁上りなしなので、この桁は、終了。
よって、今までの各桁で出てきた数字を1の位から並べると、
__9 6 1__となるので、人間界と同じ数が算出できる。
さいごに
符号体系の一つのB.C.Dについてちょっとだけまとめた。桁上りの部分だったりちょっと難しいけど、理解さえしてしまえばそんなに難しいことはしてない。わからなかったら、違うページでググってくれ。(笑)