FIELD 02 / DIGITAL REPRESENTATION

0と1で、数・文字・音・画像を表す

連続量をデジタル化する仕組みから、2進数、論理回路、コンピュータの構成と誤差まで。表現の規則を順にたどります。

READING GUIDE

学び方を選ぶ

重要キーワード用語や仕組みを選んで、必要な部分だけ確認します

順番に読んでいます

01

ANALOG · DIGITAL

連続する量を、区切られた値で表す

アナログは連続量、デジタルは離散的な記号や数値で表現します。

角度・速度・電圧のように途中の値が連続して存在する量を、0と1など区切られた記号や数値で表す方法をといいます。現実の音や光は連続量ですが、コンピュータでは一定の規則で数値へ変換して扱います。

滑らかなアナログ波形と、標本化して得たデジタル値を対比したグラフ
アナログ波形は滑らかな連続曲線。デジタル化では時刻と値を区切って数値化する。

アナログ

連続的な変化を連続した信号として表しますが、複製や伝送を重ねると雑音やひずみの影響が蓄積しやすい性質があります。

デジタル

離散値なので複製・処理・保存に向き、一定範囲の雑音なら元の記号を判定して復元できます。

デジタル化した情報の品質は、どれだけ細かく時間を区切るか、値を何段階で表すかによって変わります。

さらに詳しく:デジタル化で失われるものと得られるもの

標本化では時間方向を、量子化では値の方向を区切ります。区切りを細かくすると元の信号へ近づきますが、データ量と処理量は増えます。必要以上に細かくしても、元のセンサ精度や再生装置の性能を超えた情報は得られません。

デジタル化の利点は「必ず正確」になることではなく、誤りを検出・訂正しやすいこと、同じ規則で大量に処理できること、複数の種類の情報をビット列として統合できることです。

さらに詳しく:A/D変換とD/A変換は現実世界との出入口

マイクや温度センサが出す連続的な電気信号を、標本化・量子化して数値へ変える装置がです。逆に、数値を電圧などへ変え、スピーカやモータへ出力する装置がです。

入力側ではセンサの測定範囲とA/D変換の段階数、出力側では再生装置の範囲を合わせます。範囲を超える信号は切り詰められ、段階数が少ないと細かな差を表せません。

02

BASE · BIT · BYTE

基数が変わると、使う記号と桁の重みが変わる

10進数・2進数・16進数は、同じ数量を異なる記号体系で表します。

10進法0〜9

…10³・10²・10¹・10⁰

2進法0・1

…2³・2²・2¹・2⁰

16進法0〜9・A〜F

…16³・16²・16¹・16⁰

nビット2ⁿ通り符号なし整数なら 0〜2ⁿ−1
基数は使う記号の個数。右端を0桁目として、各桁へ基数の累乗を割り当てる。
2025₁₀ = 2×10³ + 0×10² + 2×10¹ + 5×10⁰
1011₂ = 1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 11₁₀

例えば1011₂では、左から2³、2²、2¹、2⁰の重みをもちます。1が立っている桁だけを足すので、8+2+1=11です。16進法のBは10進数の11を表すため、1011₂=B₁₆=11₁₀です。2進数16進数へ直すときは、右からずつ区切ると変換しやすくなります。

0または1を表す最小単位を、8ビットをといいます。各ビットが2通りの状態を独立に取るため、nビットの組合せは2×2×…×2=です。符号なし整数なら、nビットで0から2ⁿ−1までを表せます。例えば8ビットなら0〜255です。

接頭辞10進の倍率主な読み
k10³キロ
M10⁶メガ
G10⁹ギガ
T10¹²テラ

通信速度のbit/sと、ファイル容量のbyteを区別する

通信速度の「100 Mbps」は1秒当たり100 megabit、ファイル容量のMBはmegabyteです。1 byte=8 bitなので、単位をそろえてから転送時間や容量を計算します。

nビットで表せる状態数は2ⁿ通りです。必要な状態数以上になる最小の2ⁿを選び、その指数nが必要なビット数になります。

さらに詳しく:1000倍の単位と1024倍の単位

国際単位系ではk、M、Gはそれぞれ1000、1000²、1000³倍です。2進数と相性のよい1024倍を明確に表すときはKiB、MiB、GiBを使います。製品表示とOS表示で容量が違って見える原因になるため、計算ではどちらの規則かを先に確認します。

03

BASE CONVERSION

10進数と2進数を、桁の重みで往復する

2進数への変換は2で割った余り、10進数への変換は2の累乗を使います。

11₁₀ → 1011₂

  1. 11 ÷ 2 = 5余り 1
  2. 5 ÷ 2 = 2余り 1
  3. 2 ÷ 2 = 1余り 0
  4. 1 ÷ 2 = 0余り 1

余りを下から読む ↑

1011₂ → 11₁₀

1×2³ = 80×2² = 01×2¹ = 21×2⁰ = 1

8+0+2+1=11

10進数からは2で割った余りを下から読み、10進数へ戻すときは各桁の重みを足す。

2進数から16進数へ

右から4ビットずつ区切ります。例えば 11010110₂ は 1101 0110₂ なので、D6₁₆です。16進数1桁はに対応します。

確認:101101₂=32+8+4+1=
04

SIGNED · FLOAT · TEXT

ビット列の解釈規則が、負数・小数・文字を決める

同じ0と1でも、符号化方式によって意味は異なります。

2の補数

負数は、正の値の全ビットを反転し1を加えるで表すことが一般的です。4ビットで+5は0101₂、反転して1010₂、1を加えて1011₂となり、これが-5を表します。

さらに詳しく:2の補数で引き算を足し算に変える

4ビットで5−3を確かめます。引く数3は0011₂です。全ビットを反転して1100₂、1を加えた1101₂が−3を表す2の補数です。

0101₂(5)+1101₂(−3)=1 0010₂

4ビットを超えた左端の1を捨てると0010₂、つまり2になります。したがって、5−3を「5+(−3)」として同じ加算回路で計算できます。4ビットの2の補数で表せる範囲は−8〜+7なので、範囲外の結果は正しく表せません。

浮動小数点数

IEEE 754 binary32は、で構成されます。有限のビット数で実数を近似するため、丸め誤差が生じます。

さらに詳しく:数値と浮動小数点表現を往復する

1. 10進数を浮動小数点の形にする

まず、10進数を符号・仮数・指数に分けます。例えば、−132.5は−1.325×10²と表せます。符号は−、仮数は1.325、指数は2です。小数点の位置を動かしても、表している数値は変わりません。

2. 10進数を2進数に直す

binary32の例として−46.625を考えます。整数部46は101110₂、小数部0.625は0.101₂なので、−46.625=−101110.101₂です。

3. 1.xxxxx×2ⁿの形に正規化する

小数点を左へ5桁動かすと、−101110.101₂=−1.01110101₂×2⁵となります。この形にすると、符号、指数、仮数へ分けて記録できます。

4. IEEE 754 binary32の各部に入れる

binary32は、符号部1ビット・指数部8ビット・仮数部23ビットです。負の数なので符号部は1、指数部は5に127を加えた132=10000100₂、仮数部は先頭の1を除いた01110101000000000000000です。

したがって、各部を順に並べると、1 10000100 01110101000000000000000₂(16進数ではC2 3A 80 00)になります。

5. 浮動小数点表現から数値へ戻す

逆に、16ビット表現「0 10001 1100100000」を読む場合を考えます。符号部0は正、指数部10001₂は17です。指数部が5ビットなので偏り15(2⁴−1)を引き、指数は17−15=2になります。

仮数部は先頭に1を補って1.1100100000₂とし、1.1100100000₂×2²=111.00100000₂=7.125と計算します。数値から読むときは、各部を確認してから指数に応じて小数点を動かすと、手順を追いやすくなります。

文字コード

文字とビット列の対応表が文字コードです。ASCIIではKが01001011₂です。日本語を含む文字集合や符号化方式にはJIS、Shift_JIS、UTF-8などがあります。現在のWebではが広く使われます。

文字集合と符号化方式を区別する

Unicodeは世界の多くの文字へを割り当て、UTF-8やUTF-16などのが符号位置をバイト列へ変換します。同じバイト列でも符号化方式を誤ると文字化けします。

対象表現の要点注意
負の整数多くの計算機は2の補数最上位ビットを含む固定ビット幅で解釈する
小数固定小数点または浮動小数点0.1のように2進数で有限桁にならない値がある
文字符号位置をバイト列へ符号化文字集合・符号化方式・改行規則をそろえる
さらに詳しく:コードポイントとUTF-8のバイト列を区別する

Unicodeは文字ごとにU+3042のようなを割り当てます。UTF-8はそのコードポイントを1〜4 byteの並びへ変換する方式です。「1文字は必ず1 byte」でも「日本語は必ず2 byte」でもありません。

見た目が一文字でも、基底文字と結合文字の組合せや絵文字の連結によって複数のコードポイントからなる場合があります。文字数、表示幅、byte数は別々に考えます。

公式・公的資料 Unicode Consortium: What is Unicode? 文字集合、コードポイント、世界の文字を共通に扱う理由を標準化団体の説明で確認できます。
さらに詳しく:改行やタブもデータとして保存される

文字コードには表示される文字だけでなく、改行、タブなど動作を指示するがあります。改行は環境によってLF、CRLFなどの表し方が異なり、テキストを別の環境へ移すと行がつながったり余分な改行に見えたりすることがあります。

CSVを読み書きするときに文字コードと改行規則を指定するのは、この違いを正しく扱うためです。画面に見えない文字も検索・比較・データ交換へ影響します。

05

BOOLEAN LOGIC

真理値表で、論理回路の出力を確かめる

AND・OR・NOTは、入力の組合せから0または1を出力します。

論理回路では、0と1を偽・真に対応させ、回路記号が行う演算を真理値表で確かめます。は両方が1のときだけ1、は少なくとも一方が1なら1、は0と1を反転します。NOT記号の小さな丸は否定を表します。

AND回路の記号と、入力A・Bの全組合せに対する出力Xの真理値表
AND(論理積):AとBがともに1の行だけXが1になる。
OR回路の記号と、入力A・Bの全組合せに対する出力Xの真理値表
OR(論理和):AまたはBの少なくとも一方が1ならXが1になる。
NOT回路の記号と、入力Aを反転した出力Xの真理値表
NOT(否定):入力Aを反転してXへ出力する。

複数の回路は、入力側から一段ずつ読む

  1. AとBの値を決めます。
  2. 最初に通るAND・OR・NOTの出力を求め、回路図の途中へ書き込みます。
  3. その値を次の回路の入力として、最後の出力まで繰り返します。
  4. A・Bの4通りを真理値表へ並べ、読み落としがないか確かめます。
接続点を見落とさない

線の交点に黒丸があれば接続しています。単に線が交差しているだけなら、別の信号として扱います。式の記号を暗記するより、各回路がどの入力で1を出すかを図と真理値表で対応させます。

06

BINARY ADDITION · HALF ADDER

半加算器は、1桁の2進数どうしを足し算する

同じ桁に書く数と、上の桁へ繰り上げる数を二つの出力に分けます。

AND・OR・NOT回路を組み合わせ、入力AとBから繰り上がりCとその桁の和Sを出す半加算器
まず回路記号を入力側から追う。図中のア・イ・ウは各ゲートを通った途中の信号。上側はAとBがともに1のときだけCを1にし、下側はAとBの一方だけが1のときSを1にする。

は、入力Aと入力Bという二つの1桁の2進数を加えます。出力は、計算結果を2桁に分けたです。つまり、CとSを左から並べたCSが、A+Bの答えになります。

入力A入力BC
繰り上がり
S
その桁の和
2進数の足し算
00000+0=00₂
01010+1=01₂
10011+0=01₂
11101+1=10₂
1+1=10₂を回路で作る

1+1の答えは2進数で10₂です。いまの桁には0を書くのでS=0、左の桁へ1を繰り上げるのでC=1になります。この一行が、半加算器を理解する中心です。

AとBが0・0ならCSは00、0・1または1・0なら01、1・1なら10です。半加算器は「論理回路の出力」を別に覚える装置ではなく、です。

さらに詳しく:全加算器と、多桁の2進数の足し算

半加算器が扱うのはAとBという二つの入力だけです。しかし2桁目以降では、右隣の桁から繰り上がってきた1も加える必要があります。A・B・下位桁からの繰り上がりという三つを加え、上位桁への繰り上がりとその桁の和を出す回路がです。

二つの半加算器を組み合わせ、A・B・下位桁からの繰り上がりを加える全加算器
一つ目の半加算器でAとBを加え、二つ目で下位桁から届いた繰り上がりを加える。発生した繰り上がりは一つにまとめて上位桁へ送る。

多桁の加算では、右端の最下位桁から計算します。最下位桁には右隣からの繰り上がりがないため半加算器を使い、その左の各桁では全加算器を使います。

最下位桁の半加算器と上位桁の全加算器をつなぎ、繰り上がりを左の桁へ順に渡す3ビット加算回路
紙の筆算と同じく、右の桁で生じた繰り上がりを一つ左の桁へ渡す。回路ではこの受け渡しを配線で行う。

このように考えると、半加算器・全加算器・多桁加算は別々の暗記事項ではありません。「各桁を加え、繰り上がりを左へ渡す」という2進数の筆算を、回路で並行して行う仕組みです。

さらに詳しく:桁あふれを回路と数値表現の両方から見る

用意したビット数より左へ繰り上がっても、その桁を保存する場所がなければ結果を正しく表せません。これがです。例えば4ビットの符号なし整数で1111₂(15)に0001₂(1)を加えると、正しい答えは10000₂(16)ですが、下4桁だけを残すと0000₂になります。

「回路が計算を間違えた」のではなく、答えを保存する桁数が不足しています。扱える範囲を先に確認し、必要ならビット数を増やします。

07

SAMPLING · QUANTIZATION · ENCODING

音は、標本化・量子化・符号化の順で数値になる

時間方向と振幅方向をどれだけ細かく区切るかが、音質とデータ量を決めます。

滑らかな音波を標本化し、量子化して2進数へ符号化する流れ
標本点は等間隔。量子化では各標本値を最も近い段階値へ丸める。
1 標本化

一定時間ごとに振幅を測る。

2 量子化

振幅を有限個の段階へ割り当てる。

3 符号化

段階値を2進数で表す。

1秒間の標本数を(Hz)、1標本を表すビット数をといいます。一般に値を大きくすると再現性は高まりますが、データ量も増えます。

さらに詳しく:標本化で起こる誤差

測定間隔が粗いと、標本点の間で起きた細かな変化を記録できません。特に、標本化周波数の半分より高い周波数成分は、実際とは違う低い周波数に見えるを生むことがあります。

そこで、記録したい最高周波数の2倍より高い標本化周波数を使い、標本化前にそれより高い成分をフィルタで弱めます。標本化周波数を上げるほど時間方向を細かく記録できますが、データ量も増えます。

さらに詳しく:量子化で起こる誤差

量子化では、実際の振幅を最も近い段階値へ丸めます。実際の値と割り当てた段階値の差がです。例えば実際の振幅が5.3で、段階値が整数だけなら5へ割り当てるため、誤差は−0.3です。

量子化ビット数がnビットなら段階数は2ⁿです。ビット数を増やすと段階の間隔が細かくなり誤差を小さくできますが、1標本当たりのデータ量は増えます。

音声のデータ量は、標本化周波数、量子化ビット数、録音時間、チャンネル数を掛けて求めます。式で表すと、データ量[bit]=標本化周波数×量子化ビット数×時間×チャンネル数です。

計算問題:10秒のステレオ音声

標本化周波数48 kHz、量子化16 bit、2チャンネルで10秒録音したとき、圧縮前のデータ量は約何Mバイトか。

解答・解説

48 kHzは1秒間に48,000回標本化するという意味です。10秒では、48,000×10=480,000回の標本化になります。

1回の標本は16 bitで、2チャンネルなので、16×2=32 bit、つまり4バイトです。したがって、データ量は480,000×4=1,920,000バイトです。

1000バイト=1kバイト、1000kバイト=1Mバイトとして、1,920,000バイト=1,920kバイト=約1.92Mバイトとなります。実際の音声ファイルには管理情報が付き、圧縮形式では容量が変わります。

音の高さ・大きさ・音色を波形から読む

1秒間の振動回数をといい、単位はHzです。一般に周波数が高いほど音は高く聞こえます。振幅は音の大きさに関係し、波形に含まれる周波数成分の組合せが音色へ影響します。

さらに詳しく:音声圧縮と演奏情報

WAVなどはPCMを比較的そのまま保持できます。MP3やAACは、人が聞き取りにくい成分を減らすで容量を小さくします。FLACは復元後が元と一致するです。

MIDIは波形そのものではなく、音の高さ、長さ、強さ、楽器などの演奏情報を記録します。容量は小さく編集しやすい一方、再生音は音源に依存します。

08

PIXEL · COLOR · COMPRESSION

画像は、画素または図形の情報として表す

画像データの構造と色の表現を別の観点として整理します。

ラスタ形式

画素ごとの色を保存。写真やスキャン画像に向き、拡大すると画素が見える。

ベクタ形式

点・線・曲線を座標や数式で保存。拡大しても輪郭を滑らかに描き直せる。

ラスタ/ベクタはデータ構造の分類。RGB/CMYKは色の表現方法であり、同じ分類階層ではない。
比較点ラスタ形式ベクタ形式
保存するもの格子状に並んだ画素それぞれの色点の座標、線・曲線、塗り、文字などの描画命令
得意なもの写真、スキャン画像、細かな濃淡や質感ロゴ、アイコン、地図、模式図、文字を含む図
拡大したとき元の画素数を超えると、輪郭がぼけたり階段状に見えたりする表示サイズに合わせて描き直すため、輪郭を滑らかに保ちやすい
編集方法画素を選び、色や明るさを直接変更する図形の位置・大きさ・輪郭・塗りを部品ごとに変更する
容量の傾向画素数・色深度・圧縮方法の影響が大きい単純な図は小さくしやすいが、図形や効果が増えると大きくなる
代表例JPEG、PNG、GIF、WebP、TIFFSVG、EPS。PDFはベクタとラスタの両方を含められる

写真のように画面全体で色が細かく変わる画像は、無数の図形に分けるよりラスタ形式が効率的です。一方、学校のロゴや路線図のように輪郭と面の組合せで表せる図は、ベクタ形式なら小さな表示から印刷まで同じデータを使いやすくなります。

ファイルを変換しても、元の情報は増えない

SVGをPNGへ書き出すと、その時点の画素数をもつラスタ画像になります。反対に、JPEGをSVGファイルへ埋め込んだだけでは、写真の画素が自動的に線や曲線へ変わるわけではありません。用途に合う形式を、作成・編集の段階から選びます。

ラスタ画像は、画像を画素に区切る、明るさや色を有限の段階へ割り当てる、段階値を2進数で表すの順でデジタル化します。

RGBの加法混色とCMYKの減法混色を、重なりによって生じる色まで示して比較した図
RGBは光を加えると白へ、CMYは光を吸収するインクを重ねると黒へ近づく。印刷では黒インクKも使う。

無圧縮画像では、横画素数と縦画素数を掛けた画素数に、1画素あたりのビット数を掛けてデータ量を求めます。式で表すと、無圧縮画像のデータ量[bit]=横画素数×縦画素数×1画素のビット数です。

ディスプレイは光の三原色を使う加法混色です。R・G・Bを同じ強さで重ねると白になります。プリンタは色材の三原色を使う減法混色で、実際には黒の再現とインク量の節約のためKを加えたCMYKを使います。RGB各色8ビットなら1画素は24ビットで、表せる色は2²⁴=16,777,216色です。

計算問題:無圧縮のカラー画像

800×600画素、1画素24ビットの画像のデータ量は約何Mバイトか。

解答・解説

画素数は800×600=480,000画素です。1画素24ビットなので、全体のデータ量は480,000×24=11,520,000ビットです。

8ビット=1バイトなので、11,520,000÷8=1,440,000バイトです。

1000バイト=1kバイト、1000kバイト=1Mバイトとして、1,440,000バイト=1,440kバイト=約1.44Mバイトとなります。これは無圧縮の場合の値で、PNGやJPEGなどで圧縮した後の容量は画像の内容と圧縮方式によって変わります。

解像度という語の違い

画面では画素数、印刷やスキャンでは1インチ当たりの点や画素数(dpi・ppi)を指すことがあります。何を表す値か確認します。

用途に合わせて、画像形式と圧縮方法を選ぶ

上の式を1920×1080画素、RGB各8 bitへ当てはめると、非圧縮では1920×1080×24=49,766,400 bit、約6.22 MBです。実際のファイル容量は、形式と画像内容、圧縮方法によって変わります。

形式特徴向く用途
JPEG写真向けの非可逆圧縮。繰返し保存で劣化し得る写真、Web掲載
PNG可逆圧縮、透過を扱える図、文字を含む画像、画面
GIF色数が限られるが簡単なアニメーションを扱える小さな図や短い動き
SVG図形を数式・属性で表すベクタ形式ロゴ、アイコン、拡大する図
さらに詳しく:画像処理では元に戻せるかを意識する

明るさ・コントラスト・色調の補正、トリミング、回転、拡大縮小、フィルタ処理などがあります。画素を間引いた後に拡大しても失った細部は戻りません。編集用の元データを残し、公開用のサイズや圧縮率は別に調整します。

印刷物ではCMYK、ディスプレイではRGBが基本ですが、機器ごとに表せる色の範囲が異なるため、同じ数値でも完全に同じ色になるとは限りません。

さらに詳しく:可逆圧縮と非可逆圧縮の中にも複数の考え方がある

同じ値が続く長さを記録するランレングス法、出現頻度の高い記号へ短い符号を割り当てるハフマン法、既出の並びを辞書として参照する方式などがあります。これらは元データへ戻せるです。

JPEGなどの非可逆圧縮は、人が気付きにくい細部を減らして大きく圧縮できます。ただし、保存を繰り返すと劣化が重なります。編集用は元データや可逆形式、配布用は用途に合う圧縮率というように使い分けます。

さらに詳しく:解像度・色深度・画像サイズを一つの式で結ぶ

圧縮前のラスタ画像のおよそのデータ量は、横画素数×縦画素数×1画素当たりのbit数で求めます。RGB各8 bitなら1画素24 bitです。透明度を8 bit追加する形式では32 bitになります。

印刷のdpiは1 inch当たりの画素数です。横3000画素の画像を300 dpiで印刷すると横10 inchになります。画素数、物理的な大きさ、dpiのうち二つを決めると残りが決まります。

さらに詳しく:輪郭のぎざぎざを減らすアンチエイリアシング

斜線や曲線を画素の格子へ置くと、境界が階段状に見えるが生じます。アンチエイリアシングは、境界付近の画素へ中間色や透明度を与え、滑らかな輪郭に見せる処理です。

元の解像度が増えたわけではなく、周囲との平均で見え方を調整しています。小さな文字ではぼやける場合もあるため、表示倍率、背景色、フォントのヒンティングと合わせて調整します。図を縮小する時も、単純な間引きではなく適切な再標本化を使います。

さらに詳しく:ディザリングで、少ない色から中間の見え方を作る

は、使える色が少ない時に異なる色の画素を規則的または確率的に配置し、離れて見た時に中間色や階調があるように感じさせる方法です。新聞写真の網点も似た考え方です。

色数を増やす処理ではないため、拡大すると点の模様が見えます。滑らかな階調を優先するか、輪郭や細部を残すかで配置方法を選び、表示装置や印刷方法に合わせて評価します。

09

CPU · MEMORY · I/O · SOFTWARE

五大装置が連携し、命令を順に実行する

入力・記憶・演算・制御・出力の役割を、データと命令の流れで捉えます。

入力装置データ・指示を取り込む
CPU制御装置演算装置
主記憶装置実行中の命令処理中のデータ
補助記憶装置SSD・HDDなど長期保存
出力装置処理結果を外へ示す
入力装置から取り込んだ命令・データは、まず主記憶装置へ置く。CPUは主記憶装置と読み書きし、主記憶装置から出力装置へ結果を渡す。補助記憶装置は主記憶装置とデータを交換する。
装置役割
入力装置データや指示を取り込むキーボード、マウス、センサ
記憶装置命令とデータを保存するメモリ、SSD
演算装置算術演算・論理演算を行うCPU内の演算回路
制御装置命令を解読し各装置を制御するCPU内の制御回路
出力装置処理結果を外へ示すディスプレイ、プリンタ

CPUの速さは、一つの数値だけでは決まらない

はCPU内部の動作タイミングを1秒当たりの回数で表します。ただし、1回のクロックで行える仕事、コア数、キャッシュ、主記憶とのやり取り、実行するソフトウェアなども処理時間へ影響します。同じクロック周波数でも、設計や処理内容が違えば速さは同じとは限りません。

はハードウェア資源を管理し、アプリケーションへ共通機能を提供する基本ソフトウェアです。デバイスドライバは機器固有の操作をOSにつなぎ、ファームウェアは機器の基本制御や起動を担います。

CPUは、命令の取出し・解読・実行を繰り返す

主記憶装置から命令をへ取り出し、制御装置が命令を解読し、必要なデータをレジスタへ読み、演算装置が処理して結果を書き戻します。このがクロックに合わせて繰り返されます。

役割特徴
レジスタCPUが直ちに使う値非常に高速・小容量
キャッシュメモリよく使う命令・データを保持主記憶との速度差を縮める
主記憶装置実行中のプログラムとデータ電源断で内容が失われるRAMが中心
補助記憶装置長期保存SSD、HDDなど。大容量だが主記憶より遅い
さらに詳しく:OSとアプリケーションの役割

は、CPU時間、主記憶、ファイル、入出力装置、利用者権限を管理し、アプリケーションへ共通の機能を提供します。アプリケーションが機器ごとの違いをすべて直接扱わずに済むのは、OSやデバイスドライバが仲立ちするためです。

コンパイラやインタプリタは人が書いたプログラムを実行可能な命令へ橋渡しします。最終的にCPUが実行するのは機械語の命令です。

さらに詳しく:性能測定とボトルネック

は、決められた処理を実行して性能を比較する方法です。目的と違う種類のベンチマークだけで機器を選ぶと、実際の利用感と一致しないことがあります。

CPUが速くても主記憶が不足してストレージへの退避が増える、ネットワークが遅くて待ち時間が長いなど、全体を制限する部分をといいます。利用場面に近い条件で測定します。

さらに詳しく:バスとデバイスドライバ

CPU、主記憶、入出力装置の間では、データを運ぶデータバス、場所を示すアドレスバス、読み書きなどを指示する制御線が働きます。一本の線だけで命令もデータも順番も運ぶわけではありません。

は、OSからの共通的な要求を機器固有の命令へ変換します。新しい機器を接続した時にドライバやOSの対応状況を確認するのは、同じ種類の装置でも制御方法が異なるためです。

さらに詳しく:キャッシュは時間的・空間的局所性を利用する

CPUは主記憶より高速なので、よく使う命令やデータを小さく高速なへ置きます。直前に使ったデータを再び使いやすい性質を時間的局所性、近いアドレスのデータを続けて使いやすい性質を空間的局所性といいます。

配列を順番に処理すると近いデータをまとめて読み込みやすくなります。キャッシュ容量だけでなく、データの並べ方やアクセス順も実行時間へ影響します。

10

FINITE PRECISION · ERROR

有限桁で表すと、あふれや近似による誤差が起こる

コンピュータが扱える桁数には限りがあるため、整数や小数の計算結果を点検する必要があります。

誤差発生する状況具体例
固定ビット数で表せる範囲を超える16ビット符号なし整数で60,000+10,000を計算すると上限65,535を超える
有限桁へ丸めるπ=3.141592…を3.1416として計算する
無限に続く計算を途中で止める1+1/2+1/4+…を有限項までで打ち切る
ほぼ等しい値の差で有効桁が減る1.0001−1.0000のような近い数の差で上位桁が消える
絶対値が大きく異なる値の計算で小さい値が反映されない非常に大きな値へ小さな値を足しても、有限桁では変化が残らない

2進浮動小数点では0.1を有限桁で正確に表せないため、Pythonの 0.1 + 0.20.30000000000000004 となる例があります。金額のように10進での正確さが必要な場合は整数の最小単位で保持する、10進型を使う、比較時に小さな許容誤差を設けるなど、目的に合う方法を選びます。