データ

データ型

  • このエントリーをはてなブックマークに追加
2の補数

この記事は、映像・音声 からの続編です。

この記事は、絵でわかる プログラムとは何か(5)~データ~ の一記事です。

この記事のポイント

  • コンピューター内で扱われる全てのデータはバイナリデータ
  • 負数のバイナリデータ化には、通常、「2の補数」が使われる。
  • 小数のバイナリデータ化には、通常、「浮動小数点法」が使われる。
  • バイナリデータ化前のデータのタイプを、データ型(data type)と言う。
  • 特に、ブール型1ビットのバイナリデータフラグ(flag)と言う。
  • 通常、画像型や音声型のような非テキストデータ型はなく、FILE型にまとめられる。

プログラム内で扱われるデータ

全てのデータはバイナリデータに変換

この章の冒頭で、コンピューターは基本的に電気のON/OFFパターン(2進数の数値)しか扱えないということを書きました。

確かに、文字列や画像、音声、動画など、様々な数値以外のデータまで、コンピューターで扱えているように見えます。しかし、それらはコンピューター外での見え方です。実際は、これまで見てきたように、コンピューター内では数値に変換されたデータが扱われているのです。

この変換後の、電気のON/OFFパターンだけで表せる2進数の数値を、バイナリデータ(binary data)と言います。マシンコードのデータは、全てバイナリデータである必要があります。

特殊な数値もバイナリデータに変換

また、数値と言っても、ON/OFFパターンだけでは負号(マイナス)や小数点が使えません。

このため、負整数や小数のデータも、負号(マイナス)無し・小数点無しの数値(バイナリデータ)に変換して、処理します。

負整数から変換する例

[10進数の -3 ] ⇒ [2進数の -11 ] ⇒ [負号無し2進数の 11111101 ]

負整数は、多くの場合、正整数と同じ扱いができる方式【2の補数(two’s complement)】が採用されています。

2の補数
2の補数の考え方

例えば8ビット表現の符号あり整数データ(00000000~11111111)は、10進数の 0 ~ 255 (正整数)を表すのではなく、(負整数) -128 ~ 127 (正整数)を表す整数データ(integer)として扱われます。

この方式は、11111111 に 00000001 を足すと、繰り上げビットの「桁あふれ」を無視すれば 00000000 となり、ループしてまた 0 に戻ることを利用しています。

つまり、

  • (負整数) -128 ~ -1 は 10000000 ~ 11111111
  • 0 は 00000000
  • (正整数) 1 ~ 127 は 00000001 ~ 01111111

に、それぞれ変換されることになります。

負整数は、10進数だけで考えると「256を足した数値に変換される」と考えることもできます。実際、-128 は、256 足した 128 (10000000) に変換され、-1 は、256 足した 255 (11111111) に変換されます。

小数から変換する例

多くのコンピューターで採用されている変換方式【浮動小数点法(floating-point)】の場合、広範囲の数をそこそこの精度で扱えるようにしているため、小さな数でも、データの桁数はたくさん必要になります。

0.125 を 32ビット アーキテクチャ の 浮動小数点法 で表現した例

[十進数の 0.125 ] ⇒ [二進数の 0.001 ] ⇒ [小数点無し二進数の 00111110000000000000000000000000 ]

+/-小数点シフト小数部分

0: + / 1: – |元の数が1以上2未満になるまで2を掛けたり(2の+1乗)割ったり(2の-1乗)する小数部分23桁表記
上の例では、
十進数表示なら、 0.125 = +1 × 1 / 8 = + 1.00000000000000000000000 × 2 の -3
二進数表示なら、 0.001 = +1 × 1 / 1000 = + 1.00000000000000000000000 × 10 の -11

累乗の負整数を負号無しに変換すると、
+ 1.00000000000000000000000 × 10 の (01111100 – 01111111)乗  【黒字部は固定値】

※ここでは累乗の負整数の変換に、2の補数方式ではなく、常に01111111を足すシフト方式が標準となっています。
– 00000011 + 01111111 = 01111100

シフト方式

データ型

そして、バイナリデータはプロセッサで処理され、また別のバイナリデータ (処理結果) になりますが、処理結果のバイナリデータは、基本的にまた変換前(バイナリデータ化前)と同じタイプのデータとして、復元できなければなりません。

この処理後の結果がまた戻るべき、バイナリデータ化前のデータのタイプを、データ型(data type)と言います。

データ型の例: 整数型、浮動小数点数型、文字列型、日付型、ブール型… etc.

日付型

日付(Date)の表記には通常、数値と文字が混ざっていますが、プログラミングでは、日付型は数値に近いデータ型として扱われます。一般的には、日付と時刻を合わせて日時として扱えたり、2つの日時の引き算から経過時間(Interval)を出せたり、ミリ秒単位(場合によってはさらに短時間単位)で扱えたりすることが共通します。

ブール型

プログラミングをする人以外にはイメージしづらいものとして、ブール型というデータ型もあります。ブール型は、TRUEまたはFALSEのどちらかの値しかとらないデータ型です。「〇か?×か?」という論理判定をブール代数という数学としてまとめた、ブール(Boole)さんの個人名から来ています。「ブールさんが考えたもの」という意味で、ブーリアン(Boolean)型と言われることもあります。

一般的には、1ビットのバイナリデータに変換され、〇ならTRUEで “1”、×ならFALSEで “0” となりますが、そうならない環境もありますので、注意が必要です。

なお、このように使われる1ビットのバイナリデータをフラグ(flag)と言います。

フラグと言うと専門用語らしく聞こえますが、フラッグ(旗)のことです。フラグにせよフラッグにせよ、AかBか2つの状態について、今はどちらなのかを知らせるのが flag の役目です。TRUEの状態になることを「フラグが立つ」と言います。FALSE状態のフラグには、様々な表現がありますが、イメージで言うと「フラグが寝る」がわかりやすいと思います。ドラマやアニメで、「真犯人フラグ」、「死亡フラグ」などとして使われるのも、同じ由来です。

フラグ

バイナリ型

なお、画像や音声のように文字化されていないデータを、高級プログラミング言語で扱う場合、通常、言語仕様として画像型や音声型のようなデータ型は作られません。

その代わりに、バイナリ(binary)(あるいはBLOB型)と言われるようなユルいデータ型でひとくくりにして扱います。

BLOBは、Binary Large OBject の略ですが、英語の blob には元々「粒」のような意味があります。
バイナリ型とは、そのままバイナリデータとして扱えるようになっているデータのことで、バイナリデータはすべてバイナリ型です。

逆に、数値や文字列のように文字化されているデータテキストデータとも言います。
大きなテキストデータは、BLOBに対峙して特に CLOB: Character Large OBject と言う場合もあります。

画像や音声のように文字化されていないテキストデータは、通常、文字だけで書かれるソースコード上に表記することができません。そのため、他のデータ型と同じようにして扱うことはできないのです。

そこで、画像/音声は、画像/音声用のファイルフォーマットに従って記録された画像/音声データ、つまりファイルを、プログラムでの取り扱い単位とします。
したがって、バイナリ型のデータは、FILE型を通して間接的に扱うことが多くなっています。

そのファイルが、どんなファイルフォーマットに従って記録されているかは、通常、ファイル名に含まれる拡張子や、ファイルデータの冒頭(ファイルヘッダ)で判別できるようになっています。

この記事のまとめ

コンピューター内で扱われる全てのデータは、2進数の数値、つまりバイナリデータです。

自然数以外の数値では、バイナリデータへの変換に少し工夫が必要で、通常、負数のバイナリデータ化には「2の補数」が使われ、小数のバイナリデータ化には「浮動小数点法」が使われます。

バイナリデータ化前のデータのタイプを、データ型(data type)と言います。
通常、画像データや音声データには、画像型や音声型のようなデータ型はなく、非テキストデータ型は、FILE型としてまとめられます。

次は、データストリーム に進みましょう。

この記事は、絵でわかる プログラムとは何か(5)~データ~ の一記事です。

コンピューターのしくみ全体を理解したい場合は、以下の2コースがお勧めです。

日本全国 オンラインレッスン にも対応しています。

知りたいことだけ単発で聞きたい場合は、 オンラインサポート をご利用ください。

  • このエントリーをはてなブックマークに追加

記事を検索

コメントを残す

*

CAPTCHA