ソフトウェア技術者向け情報

2.コンピュータのデータ記述
・・・コンピュータが使用する「言葉」・・・

  コンピュータの中では、すべての情報を「1」と「0」で表現しています。 最小である一つの情報(「1」か「0」)を表す単位をビット(bit)と呼びます。 言い換えると、すべての情報はビットの集まりとしてコンピュータの中で取り扱うのです。(注1)
このビットを8つ集めた情報をバイト(byte)と呼び、このバイト(8ビット)単位の情報で文字や数字の情報を表わします。 (一部の大型コンピュータを除き、現在ではバイト単位で情報を扱うのが、コンピュータの主流となっています。)(注2)

注1:
「ビット」は、シャノンが情報量の単位として採用しました。 なお、ISOおよびJISでは情報量の単位としてビットの代わりにシャノン(Sh)を規定しています。
(JIS X 0016:1997、 ISO/IEC 2382-16:1996)
ただし、コンピュータ業界では、「ビット」の呼び方が一般的なようです。
注2:
1バイトは、8ビットで表す情報を意味しており、通信制御情報などが付加されると1バイトは8ビット以上が正しい表現になります。 また、通信分野などでは、厳密に8ビットの量を表す単位として「オクテット」も使用します。

▼ 本稿の内容情報
2-1.コンピュータのデータ表現
2-2.数字データと文字データ
2-3.数字データの表現
2-4.数の単位
2-5.国際規格:2進数の単位


2-1.コンピュータのデータ表現

 コンピュータで扱うデータは1バイトを8桁の2進数として、256種類(0から255)の情報に紐づけて使用します。 例えば、「01000010(2進法)」は、10進数では2の6乗 + 2の1乗= 64 + 2 =66を表現しています。 1バイトで表現できるのは、「00000000(2進数)」(10進数で「0」)から、「11111111(2進数)」(10進数で「255」)まで256種類となります。 現実に、コンピュータが扱う情報を見るために「1と0」では長くなってしまい不便なので、2の3乗(8進法)や2の4乗(16進法)での記数法が考案されました。 現在では、2の4乗である16を基数とした16進法が広く使用されています。 1桁で0から15の数(2進数の4ビット)を表します。通常の数字では0から9までですので、10を「A」、11を「B」、12を「C」、13を「D」、14を「E」、15を「F」で表します。 16進数はヘキサデシマルといい、ヘキサ(16のこと)と略称します。 15(10進数)すなわちF(16進数)を、0xF、0XF、Hex F、Fh、FHと表現することもあります。したがって、1バイトは2桁の16進数を用いて表示することが可能であり、近年では、一般的な表現方法となっています。

参考:10進数と2進数の対応表
taiouhyou 

2-2.数字データと文字データ

 数字データとしての「1」は、1バイト表示では「00000001(2進数)」ですので「01(16進数)」で表します。 一方、文字データとしての「1」は「11110001(2進数)」すなわち「F1(16進数)」(EBCDIK:エビシディックコードの例、メインフレーム用)や、 「00000000 00110001(2進数)」すなわち「0031(16進数)」 (JIS規格・ISO規格に準拠、PCで一般的に使用している2バイトのユニコード:Unicode)で表します。 ユニコードは、WindowsPCをご利用の方はかな漢字変換システムのIMEパッドで一覧参照可能です。 文字コードを使用すると、2バイトでは、256×256個の情報(数字、文字、記号、および、コンピュータへの制御記号)が表現可能です。
文字データの表現は、コードと呼ばれる文字のセットにより異なります。従来は、メーカごとの機種や搭載するOSごとに異なる文字セットが用いられていました。 2012年現在、多くのカナ漢字変換システムでは一般的にUTF8という規格のUnicode(ユニコード)という文字コードを使用しています。 ユニコードとは、世界中の多くのコンピュータ上の文字列を一貫した方法で符号化し、表現し、扱うためのコンピュータ業界の標準です。 (1980年代に提唱され、世界中のメーカから技術者が集まって改訂しています。) 文字コードはJISの規格(半角の英字と数字はX 0201:ANK (Alphabet, Numerals, Katakana)など)として定められており、国際規格ISOの規格(X0201はISO 646:ASCU)に準拠しています。

u-code-k1

上の例示において、漢字の「木」には、6728(16進数)がコードとして割り当てられています。(番地とも呼びます。)

2-3.数字データの表現

 2進数で計算用の数値データを取り扱う場合、プラス1以上の「正」の数とマイナス1以下の「負」の数では、表記方法が異なります。 (以下、本稿では、単純化のため、1バイトの整数を用いて例示します。16進数は0x00のように表記します。)
(1).「0」以上の正の数
前述のとおり、1バイト(8ビット)では、0x00「2進数で00000000」から0xFF「2進数で11111111」の256通りの情報が規定できます。 0以上の整数は、0x00から0x7F「2進数で01111111」までの128通りを使用し、10進数の「0」から「127」としています。 左端のビットは、「0」以上の数では使用しないのです。(負(マイナス)の数で使用します。)
(2).負の数(マイナス)
マイナスの数は、「補数」という形式でデータとして取り扱います。 1バイト(8ビット)では、10進数の「-1」は、0xFF「2進数で11111111」と表します。 このことは、「-1」は、「1の補数」で表すルールになります。「1の補数」とは「1」と足し算すると、桁があがり、計算前に使用していた桁がすべて「0」になることを示しています。 「1」すなわち0x01「2進数で00000001」と「-1」すなわち0xFF「2進数で11111111」を足すと、「2進数で100000000」となります。 1バイト分の情報は右端から8桁です。すべて、「0」すなわち0x00「2進数で00000000」となります。 同様に、1バイトの「2の補数」は0xFE「2進数で11111110」と定義します。 「2」と「2の補数」を足すと1バイトの情報は「0」を示します。 従って、1バイトの負の数は「-1」すなわち0xFF「2進数で11111111」から「-128」すなわち0x80「2進数で10000000」までの128通りとなります。
コンピュータは補数のデータを利用することによって、「1-1」の計算を「1+(-1)」の形式で実行することになります。 言い換えるならば、「引き算」は「補数の足し算」として、高速に処理することが可能なのです。

2-4.数の単位

 現代のコンピュータ利用シーンでは、高速化・大量処理能力が進展したために、かなり大きな数・小さな数を取り扱う場合が増え続けてています。 近年の2010年以降のスーパーコンピュータは「京」(ケイ:数字の単位)と命名されました。 1秒間に「1京回=10,000,000,000,000,000回」の演算が可能なのです。
(1)・日本の数の単位(大きい数)
江戸時代の著作で、中国の数学書をもとにした「塵劫記:1627年、吉田光由 著」をおおむね採用しているようです。
(一桁で切り替わり)一、十、百、千、
(四桁で切り替わり)万、億、兆、京(ケイ)、1垓(ガイ)、・・・ここまで新聞でも採用
(以降は、参考まで)シまたはジョ(注3)、譲、溝、澗、正、載、極、
(八桁で切り替わり)恒河紗、阿僧祇、那由多、不可思議、無量、大数
(2).日本の数の単位(小さい数)
(一桁で切り替わり)分(ブ)、厘、毛、糸、・・・ここまで金融機関で使用
(以降は、参考まで)忽、微、繊、沙、塵、埃、渺、漠、模糊、逡巡、須臾、瞬息、弾指尾、刹那、
六徳、虚空、清浄、阿頼耶、阿摩羅、涅槃寂静

注3:
「シ、または、ジョウ」は、常用漢字外です。どうやら略字らしいのですが、元の字・読み方ともに、ここ数百年決着がついていません。 (10の24乗、垓の次で国際規格も制定されている範囲の単位なので、どうするのでしょうね?)

2-5.国際規格:2進数の単位

 国際度量衡総会(CGPM、1875年設立の国際委員会)で改良を重ねられたSI接頭辞が一般的に(新聞でも)使用されるようになってきました。
ラテン語、ギリシャ語が中心のようですが、イタリア語やデンマーク語も使用されています。
2進数の場合は、k=1,000(10の3乗)を1,024(2の10乗)と読み替えてください。
(1).大きい数(1桁で切り替わり)
da(deca、deka:デカ=10=十),h(hecto:ヘクト=100=百),k(kilo:キロ=1,000=千),
(3桁で切り替わり)
M(mega:メガ=1,000,000=百万),G(giga:ギガ=1,000,000,000=十億),
T(tera:テラ=一兆),P(peta:ペタ=千兆),E(exa:エクサ=百京),Z(zetta:ゼタ=十垓),
Y(yotta:ヨタ=1,000,000,000,000,000,000,000,000=一し(または、じょ))
(2).小さい数(1桁で切り替わり)
d(deci:デシ=十分の一),c(centi:センチ=百分の一),m(milli:ミリ=千分の一=一毛),
(3桁で切り替わり)
μ(micro:マイクロ=百万分の一),n(nano:ナノ=十億分の一),
p(pico:ピコ=一兆分の一),f(femto:フェムト=千兆分の一),a(ato:アト=百京分の一),
z(zepto:ゼプト=十垓分の一),y(yocto:ヨクト:一し(または、じょ)分の一=一涅槃寂聴)

コンピュータのデータ記述-以上


お問い合わせについて

> 過誤を発見された方、また、ご不明な点がございましたら、メールにてご連絡下さい。
→メールでのお問い合わせ


▲ページトップに戻る