【情報Ⅰ共通テスト対策】授業の実況中継(2進数・16進数)

6062

みなさん、こんにちは。まず今回の授業では『2進数・16進数』について学びます。

この授業を通じて、

  • 2進数・16進数とは
  • 10進数との相互変換方法
  • 2進数同士の計算方法
  • 「桁の重み」の理解

これらを理解してほしいと思います。

コンピュータでは「0」と「1」だけで情報を表しているので、この2進数をしっかり理解することが重要です。

コツを掴めば得意単元にできる範囲です。ぜひ、じっくりと読んでみてください。

注意

授業を受けている生徒の理解促進のため、わかりやすさを重視しています。そのため専門的な人から見ると「おや?」という表現ある場合があります。なるべく誤解にならないように表記していますが、予めご了承ください。

2進数の理解

2進数って何?基本概念

そもそも2進数って何?というところからお話ししますね。

コンピュータは、0と1だけを使った数字のシステム(数字の形)で表現(画面に表示)します。

この方法が「デジタル表現」です。

たとえば、いま画面に表示されている文字や画像もコンピュータの内部では0と1だけで表しているのです。

以下のような画像などを見たことはありませんか?

私たちが日常で使っているのは10進数(0から9までの数字を使う)ですが、

コンピュータは「2進数」という0と1だけを使う方法を用いています。

では、なぜコンピュータは10進数ではなく2進数を使うのでしょうか?

それは、コンピュータの基本構造に関係しています。

コンピュータの内部は、無数の「トランジスタ」と呼ばれる小さなスイッチで構成されています。

トランジスタは、電流を流すことで「オン(1)」と「オフ(0)」の二つの状態をとることができます。

このオンとオフの状態が、デジタル情報の基本単位であるビットを形成するのです。

このあたりは直接「情報」で問われることはないと思いますので、「そうなんだ」くらいに思ってもらえれば大丈夫です。

2進数と10進数の相互変換方法

それでは試験でも狙われやすい問題、2進数と10進数の相互変換方法を学びましょう。

変換問題(10進数→2進数)

まずは、10進数の数字を2進数で表現する変換方法を習得しましょう。

変換方法は「10進数の数字を2でどんどん割っていく」ということです。

10進数→2進数

このように最後に少しコツが必要となりますが、2で割っていき、余りを「下から上」に順に並べて書けば2進数への変換が完了です。

変換問題(2進数→10進数)

続いては逆に、2進数で表記されているものを10進数に変換する問題です。

2進数で表現された数字が「1101」のように桁数が小さければ変換表を用いることも可能ですが、

「11011001」のように桁数が大きくなると、どのような数字なのかを瞬時に判断することは極めて困難です。

2進数で表現された文字は下一桁から2の0乗=1、2桁目は2の1乗=2、というようにそれれの桁の数字に2のべき乗を掛けていきます。

2進数→10進数

そして各桁で算出した数字を足し合わせると2進数で表現された数字が10進数に変換されるという仕組みになっています。

2進数同士の足し算・引き算

2進数同士の足し算の場合、ひっ算形式で記述した方がわかりよくなります。

一桁目から順に足し算します。繰り返しになりますが、2進数では各桁を「0」か「1」でしか表せませんので

  • 0 + 0 = 0 ※「0」か「1」で表せる
  • 0 + 1 = 1 ※「0」か「1」で表せる
  • 1 + 1 = 10 ※「0」か「1」で表せないので桁を上げて表す

このようになります。

そのため、たとえば1011と1001の足し算の場合は以下のようになります。

2進数の加法

検算として10進数で1011は「11」、1001は「9」ですので

11 + 9 = 20

です。20は2進数に変換すると「10100」となりますので、計算が正しいことが証明できました。

2進数同士の減法(引き算)

引き算も基本的には上の数から下の数を引くだけです。

たとえば11101と1001の引き算の場合は以下のようになります。

引き算(繰り下がりなし)

 

検算として10進数で11101は「29」、1001は「9」ですので

29 – 9 = 20

です。20は2進数に変換すると「10100」となりますので、計算が正しいことが証明できました。

 

続いて、引き算ではくり下がりがある場合があります。

10進数のとき同様に、上の数から下の数を引けないときは、一つ上の桁から1を借りて計算します。

引き算(繰り下がりあり)

検算として10進数で11100は「28」、1001は「9」ですので

28 – 9 = 19

です。19は2進数に変換すると「10011」となりますので、計算が正しいことが証明できました。

16進数の理解

16進数の基本概念・16進数の必要性は?

それでは続いて、16進数について知っていきましょう。

16進数は、0から9までの数字と、AからFまでのアルファベットを使って数値を表現する方法です。

AからFは、それぞれ10から15を表します。

そして16に達すると桁が一つあがります。

hexadecimalTable

16進数は2進数と密接に関係があり、4ビットごとにまとめて1桁の16進数として表現できます。

例えば、2進数の「1101 1010」を考えてみましょう。これを16進数に変換するには、4ビットごとに区切ってそれぞれを16進数に変換します:

2進数の「1101 1010」

  • 「1101」は16進数の「D」
  • 「1010」は16進数の「A」

したがって、「1101 1010」は16進数で「DA」となります。

 

つづいて、32ビットの2進数「1010 1010 1100 1100 1111 0000 1111 0000」であれば

2進数

「1010 1010 1100 1100 1111 0000 1111 0000」

 

4桁ごとに16進数へ変換すると

「AACCF0F0」

したがって、「AACCF0F0」となります。

2進数で表現するよりも、はるかに見やすくなりました。

このように、16進数は、2進数の長いビット列を短く簡潔に表現するために使われます。

2進数から返還する際には4ビットごとに変換するようにしましょう。

16進数と10進数の相互変換方法

それでは16進数と10進数の相互変換方法を確認しましょう。

変換問題(10進数→16進数)

まずは、10進数の数字を16進数で表現する変換方法を習得しましょう。

その変換方法は2進数の時と同じく、「10進数の数字を16でどんどん割っていく」ということです。

10進数→16進数

変換問題(16進数→10進数)

それでは16進数から10進数への変換方法です。2進数の時と同様、

16進数で表現された数字は下一桁から16の0乗=1、 2桁目は16の1乗 =16、3桁目は16の2乗=256、をそれぞれの数字にかけて足し合わせます。

16進数→10進数(2)

そして各桁で算出した数字を足し合わせると16進数で表現された数字が10進数に変換されるという仕組みになっています。

16進数と2進数の相互変換方法

それでは少し発展的な内容ですが、2進数を16進数に変換する手順、そして16進数を2進数に変換する手順を確認しましょう。

ポイントはどちらも4ビットごとに区切るということです。

2進数から16進数:

2進数「1101 0110」を16進数に変換すると、

 

16進数へ変換すると

「D6」となります。

4ビットごとに区切って、それぞれを16進数に変換します。

例えば、2進数の「1101」は16進数の「D」に対応します。おなじように「0110」は16進数の「6」に対応します。

つまり、16進数に変換すると「D6」となります。

16進数から2進数:

16進数「2A」を2進数に変換すると、

 

2進数へ変換すると

「0010 1010」となります。

この場合、16進数の一文字が4ビットを表していることに注目しましょう。

そのため、16進数の「2」、「A」それぞれを2進数に変換しましょう。

それぞれを変換すると「0010」、「1010」となりますので、答えは「00101010」となります。

このように4ビットごとに変換する癖をつけましょう。

Nビットで表現できる状態

さきほど、16進数と2進数の変換の際に「4ビット」ずつ、と言いました。

そもそも、この「ビット」とは何なのでしょうか。

ビットとは何か?

ビット(binary digit)は情報の最小単位であり、0または1のどちらかの値をとります。

1つのビットは、コンピュータの中で「オン(1)」か「オフ(0)」かの状態を示します。

このように「オン(1)」か「オフ(0)」どちらかで表現する一つの桁のことを「ビット」と捉えてください

Nビットで表現できる状態

1ビットでは1桁なので、「0か1」の2通りを表現できます。

それでは2ビットであればどうでしょう?

2桁なので、「0か1」の2通り×2桁なので4通り(00, 01, 10, 11)です。

3ビットでは、3桁なので、「0か1」の2通り/ビット×2通り/ビット×2通り/ビット=8通り(000, 001, 010, 011, 100, 101, 110, 111)。

このように、1ビット増えるごとに、表現できる状態は2倍になります。

  • 1ビット:2^1 = 2通り(0, 1)
  • 2ビット:2^2 = 4通り(00, 01, 10, 11)
  • 3ビット:2^3 = 8通り(000, 001, 010, 011, 100, 101, 110, 111)

つまり、Nビットを使うと、2^N通りの状態を表現できます。

ビットの例

例えば、8ビット(1バイト)を考えてみましょう。

この8ビットを使うと、256通りの状態(2の8乗)を表現することができます。

これにより、コンピュータは文字、数字、画像などの複雑なデータを効率的に処理できます。

このように複数のビットを組み合わせることで、より多くの情報を表現することができるのです。

ビットと桁の重み

先程お伝えしたように、ビットをこのように「オン(1)」か「オフ(0)」どちらかで表現する一つの桁と考え、後ほどお伝えする「桁の重み」を把握できれば、これまで紹介した

  • 10進数→2進数
  • 2進数→16進数

といった変換問題も、簡単に解くことができますのでぜひ理解してください。

桁の重み

桁の重みとは、「その桁(ビット)で、かける数」と捉えてください。

たとえば、4ビット(4桁)の2進数で表現された文字は

  • 下一桁から2の0乗=1
  • 2桁目は2の1乗=2
  • 3桁目は2の2乗=4
  • 4桁目は2の3乗=8

となります。

このときの「1、2、4、8」がその「ビット(桁)の重み」となります。

桁の重み

「桁の重み」を使えば変換問題がグッと楽になる

10進数→2進数の変換も楽々

この「桁の重み」を使えば10進数から2進数への変換問題なども簡単に結果を出すことができます。

その方法は変換前の10進数の数字を、変換する2進数の桁の重みを使って分解します。

たとえば、10進数の「11」を2進数に変換する場合、

2進数の桁の重み「1、2、4、8」を使って表現すると

11 = 1 + 2 + 8

と分解することができますよね。

そして、「1、2、6」が「桁の重み」であるビットに1を、使っていないビットには「0」(今回は桁の重みが「4」のビット)を入れます。

すると、「1011」となり、2進数への変換が完了しました。

桁の重みを使った変換

2で割り続けるよりも単純明快な方法ですよね。

16進数→2進数の変換では10進数への変換を挟んで「桁の重み」で2進数へ

先程、16進数から2進数への変換方法を紹介しましたが、ややこしく感じた人はぜひ

  • 16進数を一旦、10進数へ変換
  • 10進数を「桁の重み」を使って2進数へ変換

という手順を試してみてください。

たとえば、16進数で「ACF」と表された文字の場合、

「A」、「C」、「F」をそれぞれ10進数に変換します。

すると、それぞれ

  • A → 10進数なら「10」
  • C → 10進数なら「12」
  • F → 10進数なら「15」

となります。

そしてこれらを、桁の重みを使って、2進数に変換します。

  • A → 10 = 8 + 2. → 2進数で「1010」
  • C→ 12 = 8 + 4. → 2進数で「1100」
  • F→ 15 = 8 + 4 + 2 + 1. → 2進数で「1111」

よって、16進数の「ACF」は2進数では「1010 1100 1111」と変換することができます。

16進数→2進数への変換(桁の重みを使用)
16進数→2進数への変換(桁の重みを使用)

2進数同士の足し算・引き算も10進数への変換を挟んで「桁の重み」で2進数へ

2進数同士の足し算・引き算、時に桁下がりの引き算においては、ややこしくて混乱する人もいるかと思います。

そういった時にも「桁の重みを使って10進数への変換」を挟んでから計算→再変換という手順を取れば計算しやすくなります。

たとえば

「11100 – 1001」という計算では桁下がりが発生します。

先程紹介した通り、筆算で算出すれば良いのですが、桁下がりで間違えてしまいそうという人は

2進数で表された数値をまずは10進数へ変換しましょう。

そのときに桁の重みを覚えていると楽々に計算することができます。

「11100」は桁の重みが「16、8、4」のビットで「1」となっているので、

16+8+4 = 28 とわかります。

同様に、「1001」は、桁の重みが「8、1」のビットで「1」となっているので、

8 + 1 = 9 となります。

10進数の計算だと非常に簡単ですよね。

28 – 9 = 19 と算出できますので、

この「19」を2進数に変換します。

17 = 16 + 2 + 1 で表現できますので、「16、2、1」のビットで「1」を、それ以外のビットでは「0」を入れましょう。

すると「10011」と簡単に変換することができますね。

桁の重みを使った2進数の引き算(修正2)
桁の重みを使った2進数の引き算

まとめ

ここまで2進数・16進数について、そしてそれぞれの変換方法や計算方法を伝えました。

特に覚えて欲しいのは、「桁の重み」です。

これを把握できると、すぐに変換できるのでぜひ使いこなせるようにしましょう。