情報

2進数とは~Part. 1~

本日のスライド

スライド1
スライド1
スライド2
スライド2
スライド3
スライド3
スライド4
スライド4
スライド5
スライド5
スライド6
スライド6
スライド7
スライド7
スライド8
スライド8
previous arrow
next arrow

PCの場合、「スライド表示」を別タブで表示して画面の左右に記事とスライドを表示しながら見ることをお勧めします。

スマホの場合は、スライドを一通り読んでから記事を読むと理解がしやすいかと思います。

スライドはpdfでダウンロードできますので商用利用目的を除いてご自由にご使用ください。

アナログ値とデジタル値(P.1 ~ P. 2)

アナログ値

アナログ値とは、一般的に連続した値で表現できるものです。

連続した値とはどういうことか?

例えば、現実世界の温度に着目してみると、

気象予報士おまめ

本日の神奈川県横浜市の温度は、27.8℃です

などのように、言われますね。
この時の27.8℃という数値ですが、これは小数点1桁で丸め込みして表現しています。でも、実際の温度はもっと下位の小数まで続いているはずですよね。

アナログ値というのは、どこまでも細かく読むことのできる値のことを示してます。

今回の場合の実際の現実世界の温度は、27.8353243………..(無限に続く)℃です。

つまり、グラフで温度の数値を連続してプロットした場合、
なめらかな曲線で表すことができる(数学的に言うと、微分可能である)こととなり
これが連続した値で表現できるものであることを示しています。

デジタル値

一方、アナログ値の反対として、デジタル値というものがあります。

これは、離散値で表現できるものです。

離散値とは、文字のとおり離れて散らばっている値のことです。

では、上記の温度についての例で温度が27.8℃から27.9℃に変わったとしましょう。

気象予報士おまめ

温度が、午前27.8℃、午後は27.9℃となるでしょう

この場合、その間の温度である27.85℃などの値はないものとして考えられます。
つまり、温度の数値が0.1℃刻みでしか存在していないと考えられます。

これをグラフでプロットした場合、0.1℃刻みのとびとびの値のプロットとなります。

これが離散値というもので、デジタル値です。

デジタル値の使用理由

デジタル値の使用される理由としては、

  1. 読み取りのばらつきが小さくできる
  2. 機器のサイズを小さく、より高性能にできる

の理由が挙げられます。

下記、アナログとデジタルの温度計を例にとって説明します

アナログ vs
デジタル
①について②について
アナログ温度計・各人の主観による読み取り誤差あり
・材料の劣化や寸法誤差で容易に誤差生じる
・サイズが大きい
・細かく見れない
デジタル温度計・表示により、主観の誤差なし
・劣化や寸法誤差に強い(故障はあるけど)
・コンパクト
・設計次第で範囲や温度刻みなどを柔軟にできる
アナログ温度計とデジタル温度計の特徴

これらのメリットからデジタル値を利用した温度計が広く用いられている。

上記なようなメリットがあるため多くの電化製品がデジタルを利用している。

10進数と2進数、16進数(P. 3)

ここまで、アナログ値とデジタル値について説明してきたが、
では実際のデジタル値はどのように表現されるのか具体的に説明していきます。

10進数

10進数とは、現実の世界で人間が認識しやすい数値の表現記法です。

10種類の文字種(0~9)で数値を表現するため、10進数と呼ばれます。

上記の温度(27.8℃)なども10進数による表現となります。

2進数

2進数とは、パソコンなどの電化製品などで使用されている数値の表現記法です。

2種類の文字種(0と1)で数値を表現するため、2進数と呼ばれています。

例えば、26という整数値を表現する場合、「11010」というように表現されることになります。*

*なぜこうなるのかは後述します。

電化製品の中では、0と1の状態を電圧の高低によって判別しています
電圧の高低によって、容易に判別できるので電化製品の中では、2進数によって数値などの処理が行われています。

16進数

16進数とは、文書などで2進数を短く表現する場合に使用される数値の表現記法です。

16種類の文字種(0~9、A~F)で数値を表現するため、16進数と呼ばれています。

例えば、10進数の「26」は、2進数で「11010」となります。しかし、文書などで見るときに2進数の桁数が多く、読みにくいですよね?

そこで16進数の登場です。

2進数の「11010」は16進数で「1A」と表現でき、桁数を短くすることができ可読性も向上します。

進数の変換(P. 4~P. 7)

2進数⇒10進数の変換

2進数の「11011001」を10進数へと変換してみます。

なお、2進数で表された数値について

一番右の桁をLSB(Least Significant Bit)

一番左の桁がMSB(Most Significant Bit)

1桁を1bit

と定義されます。

各桁には、\(2^N\)の重みがあり、
LSBから\(N=0\)となり、MSBに向かって1桁上がるごとに+1されていきます。

そして、各桁について2進数とその重みを乗算していき、
各桁の乗算結果の総和を取ることで10進数の値に変換することができます。

なので、2進数の「11011001」は10進数の「217」ということになります。

2進数⇒16進数の変換

2進数の「11011001」を16進数へと変換してみます。

16進数への変換については、LSBから4bitごとのブロックに2進数を区切り*、各ブロックについて2進数各桁とbit重みの掛け算と総和を求めていきます

ここで注意は、
各ブロックごとに区切った時にブロックのビット重みは\(N=0\)から始まるということです。

各ブロックごとに2進数から16進数を求めて、結合すれば最終的な16進数が求まります。
(なお、A=10, B=11, …割愛, E=14, F=15)を表しています。

なので、2進数の「11011001」は16進数の「D9」ということになります。

*16種類の文字を表すためには\(2^N\)で考えたとき\(N=4\)となるため4bitとなる

10進数⇒2進数の変換

10進数の「217」を2進数へと変換してみます。

217を2で割っていき、1ステップごとに余りを算出していきます。

最後に2で割った商が、0になるまでこれを繰り返します。

各ステップごとの余りが2進数を示しており、一番上がLSB、下がMSBとなる。

なので、10進数の「217」は2進数の「11011001」ということになります。

16進数⇒2進数の変換

16進数の「D9」を2進数へと変換してみます。

D9の各桁を抽出して、各桁ごとの数値を2で割っていき、1ステップごとに余りを算出していきます

最後に2で割った商が、0になるまでこれを繰り返します*。

各ステップごとの余りが、16進数の各桁の2進数を示しています。

なので、16進数の「D9」は2進数の「11011001」ということになります。

*各桁の2進数の桁は4bitとなるようにする。4bitとなる前に商が0となったら、残りは0でパディングする

2進数での文字表現(P. 8)

文字コード

文字コードとは、「2進数のパターン」を「ある文字」に当てはめた決まり事のことをいいます。

文字コードは、様々な種類があり言語や地域などにあった文字コードが設定されていたり、ソフトウェアごとに文字コードが設定されていたりしています。

文字コード特徴
ASCIIコード英数字・記号・制御文字(\や/など)のみが定義されている。
日本語は定義されていない。
シフトJISコードASCIIコードに、漢字や仮名の日本語を定義したもの
Unicode世界中の文字を定義したもの。主なものにUTF-8がある。
文字コード一覧

なお、文字化けという現象に直面したことがあると思いますが、
元の文字コードと異なる文字コードでデコード(2進数⇒文字に変換)した場合に起きる現象です。

2進数で「こんにちは」

文字コード「Shift-JIS」で、日本語の「こんにちは」を2進数で表現してみます。

*Shift-JISのコード表は下記サイトを参考にしました。
https://seiai.ed.jp/sys/text/java11/shiftjis_table.html

文字コード表に則って、各文字について2進数で表現すると

「こ」・・・1000 0010 1011 0001

「ん」・・・1000 0010 1111 0001

「に」・・・1000 0010 1100 1001

「ち」・・・1000 0010 1011 1111

「は」・・・1000 0010 1100 1101

となります。このようにパソコンなどの内部で0と1を使って表現されています

まとめ

今回は、アナログ値とデジタル値の違いやデジタル値で使用される2進数、10進数、16進数の表現や各進数変換、2進数での文字表現について説明させていただきました。

  • アナログ値は、連続値で表現されるもの
  • デジタル値は、離散値で表現されるもの
  • デジタル値は、2進数や10進数、16進数で表現される
  • 2進数⇔10進数、2進数⇔16進数は、相互に変換できる
  • 文字コードに従って、2進数で任意の文字を表現できる