パック10進数
コンピュータさんの数字の扱い方だよ
10進数の各桁を、それぞれ2進数4桁(4ビット)で表現するよ
簡単に書くよ
パック10進数(読:パックジュッシンスウ 英:packed BCD)とは
コンピュータ上での数字の扱い方のひとつ
であり
例えば「12」を「0001 0010」のようにする、10進数
(各桁が「10」になると桁上がりする数字)の数字の各桁を それぞれ2進数
(各桁が「2」になると桁上がりする数字)4桁(4ビット
(0か1が入る箱))で表現するやり方(で表現した数字)
です。
詳しく書くよ
順番に見ていきましょう。
まずは予備知識として
・ビット
・バイト
・10進数
・2進数
・2進化10進数(BCD)
・アンパック10進数(ゾーン10進数)
について説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
ビットは、コンピュータさんの世界における「0か1が入る箱」です。
あるいは、この「0か1が入る箱」の数を表す単位です。
例えば「4ビット」であれば「0か1が入る箱が4つあるよ」の意味になります。
バイトは「ビットが8つ集まったもの」です。
0か1が入る箱(ビット)が8つ入るくらいの大きな箱がバイトだと思ってください。
あるいは、このデカい箱の数を表す単位がバイトです。
「2バイト」であれば「ビットが8つ入る大きさの箱が2つあるよ」の意味になります。
……というのが基本ですけどね。
こだわり派の人がいるかもしれないので補足しておきます。
実は必ずしも1バイトが8ビットとは限りません。
環境によっては「1バイト=7ビット」のときもあれば「1バイト=9ビット」の場合も あります。
ただし、一般的には
1バイト=8ビット
です。
それ以外は例外と捉えて、あまり気にしないでください。
10進数は「各桁が『10』になると桁上がりする数字」です。
みなさんが日常生活で使っている数字は、ほとんどが10進数です。
2進数は「各桁が『2』になると桁上がりする数字」です。
具体的には
10進数:2進数
0:0
1:1
2:10
3:11
4:100
5:101
6:110
7:111
8:1000
9:1001
10:1010
のような感じです。
2進化10進数は「10進数の数字の各桁を、それぞれ2進数4桁で表現するやり方(で表現した数字)」です。
「BCD」と表現されることも あります。
「BCD」と表現された場合は「Binary-Coded Decimal(バイナリ・コーデッド・デシマル)」の略です。
気が向いたら、覚えてあげてください。
※「Binary-Coded Decimal」を何となく日本語にすると「2進法で符号化された10進数」となります。[詳細]
例えば、そうですね。
10進数で「19」という数字が あったとしましょう。
2進化10進数にするときは数字の各桁を分けて考えます。
具体的には「1」と「9」に分けるのです。
10進数の「1」を2進数4桁で表現すると「0001」です。
10進数の「9」を2進数4桁で表現すると「1001」になります。
2つをくっつけた「0001 1001」が10進数「19」を2進化10進数で表現したものです。
基本的には、これだけです。
桁数が増えても考え方は同じです。
例えば3桁の10進数「125」であれば「1」と「2」と「5」に分けて、それぞれ2進数4桁「0001」「0010」「0101」に変換して、くっつけるだけです。
なお、2進数4桁に変換するのは「9」を表現するのに4桁必要だからです。
10進数「9」は2進数で表現すると「1001」になります。
「2進数が4桁あれば0から9まで表現できるよね」という理由で4桁になっているのです……多分。
アンパック10進数は、コンピュータさんの数字の扱い方のひとつで「10進数の数字の各桁を、それぞれ2進数8桁(=1バイト)で表現するやり方(で表現した数字)」です。
「ゾーン10進数」とも呼ばれます。
アンパック10進数の考え方は2進化10進数と同じです。
2進化10進数では2進数4桁だったのがアンパック10進数では8桁になるだけです。
それでは、どうして4桁で済むのに8桁使うのでしょうね?
それはコンピュータさんの都合が関係してきます。
2進数4桁は4ビットです。
2進数4桁を表現するには、0か1が入る箱が4個必要ですよね。
2進数8桁は8ビットです。
2進数8桁を表現するには、0か1が入る箱が8個必要ですよね。
ただし、8ビットは1バイトです。
ビットが8つ入る大きな箱(バイト)を1つ用意すれば、それで済みます。
小さい箱が4つもあるより大きい箱が1つだけある方が管理しやすそうですよね。
コンピュータさん的には4ビット単位で管理するより1バイト単位で管理する方が楽なのです。
そんな理屈……かどうかは知りませんが、多分そんな理屈で
「頑張れば2進数4桁(4ビット)で表現できるけど、管理上楽だから2進数8桁(1バイト)で表現するね!」になっている2進化10進数っぽいやつ
がアンパック10進数です。
なお、実際の中身は、もう少しだけ複雑です。
例えば「マイナスの数は、どう表現するの?」とかがありますからね。
そこら辺の あれやこれやは他のところで勉強してください。
以上を踏まえて
10進数の数字の各桁を、それぞれ2進数4桁(4ビット)で表現するやり方(で表現した数字)
が「パック10進数」です。
アンパック10進数では1桁表現するのに1バイト(8ビット)使いました。
ただし、実際には4ビットあれば表現できます。
1バイト(8ビット)使っているのは管理が楽だからです。
4ビットあれば表現できるのに1バイト(8ビット)使っているのです。
無駄ですね。
もったいない!
そんな考え……かどうかは知りませんが、多分そんな考えで
「頑張れば2進数4桁(4ビット)で表現できるけど、管理上楽だから2進数8桁(1バイト)で表現していたのね!でも、やっぱり無駄が出るのがもったいないから2進数4桁(4ビット)で表現するよ!」になっている2進化10進数っぽいやつ
がパック10進数です。
なお、実際の中身は、もう少しだけ複雑です。
例えば「マイナスの数は、どう表現するの?」とかがありますからね。
そこら辺の あれやこれやは他のところで勉強してください。
あと、話を単純化するためにアンパック10進数の例の「9」を「00001001」と表現しましたが、アンパック10進数の先頭4ビットは「ゾーンビット」や「ゾーン部」などと呼ばれ、別の用途で使われています。
そこら辺の あれやこれやも他のところで勉強してください。
一言でまとめるよ
まぁ「パック10進数」って単語が出てきたら「10進数
(各桁が「10」になると桁上がりする数字)の各桁を、それぞれ4ビット
(0か1が入る箱)で表現するやり方(で表現した数字)なんだな~」と お考えください。
おまけ
■訳してみるよ
「pack(パック)」の意味は「包み」とか「荷物」とか「包む」とかです。
「10進数」は日本語ですね。
何となく くっつけると
包まれた10進数
となります。






