10進数と2進数の変換|やさしい基礎理論


2024-03-26 更新

この連載は、基本情報技術者試験の受験者を対象としたものです。
多くの受験者が苦手としている「情報の基礎理論」の分野から毎回1つずつテーマをあげて、やさしくポイント解説と問題解説を行います。
苦手分野を克服して、試験の得点をアップしましょう。

今回のテーマは、 10進数と2進数の変換 です。

10進数を2進数に変換する方法(その1)

例として、123という10進数を2進数に変換してみましょう。
図1に示したように、123を2で割った商と余りを求めることを、商が0になるまで繰り返してください。
余りを下から上に向かって書き並べた1111011が、変換後の2進数です。

図1 10進数を2で割った商と余りを求める

どうして、この方法で10進数を2進数に変換できるかわかりますか?

2進数に関する疑問は、ふだん使い慣れている10進数の例に置き換えて考えてみると、解決する場合が多々あります。
123という10進数を10で割った商と余りを求めることを、商が0になるまで繰り返してみましょう。

図2に示したように、余りとして、123の下位桁から順に3、2、1が得られます。
10進数は、10で桁上がりするので、10で割った余りとして最下位桁の値が得られるのです。これと同様に、2進数は、2で桁上がりするので、2で割った余りとして最下位桁の値が得られるのです。これを繰り返せば、最下位桁から順に1桁ずつが得られます。

図2 10進数を10で割った商と余りを求める

2進数を10進数に変換する方法

今度は、1111011という2進数を10進数に変換してみましょう。

図3に示したように、桁の重みと桁の値を掛けて集計してください。
それによって得られた123が、変換後の10進数です。

図3 2進数の桁の重みと桁の値を掛けて集計する

どうして、この方法で2進数を10進数に変換できるかわかりますか?
ここでも、10進数の例に置き換えて考えてみましょう。

図4に示したように、123という10進数で、桁の重みと桁の値を掛けて集計すると、123になります。
そもそも、数というものは、桁の重みと桁の値を掛けて集計した値を表しているからです(言われてみれば、そうでしょう!)。
123は、100が3個、10が2個、1が3個なのです。

図4 10進数の桁の重みと桁の値を掛けて集計する

10進数の例に置き換えて考えてみると、なぜ2進数の桁の重みが最下位桁から順に1、2、4、・・・なのかもわかります。
10進数は、10を基準とした数(これを「基数」と呼びます)なので、桁が上がると桁の重みは10倍になります。だから、10進数の桁の重みは、1、10、100、・・・なのです。

2進数は、2を基準とした数なので、桁が上がると桁の重みは2倍になります。だから、2進数の桁の重みは、1、2、4、・・・なのです。

10進数を2進数に変換する方法(その2)

先ほど、2進数を10進数に変換する方法として、桁の重みと桁の値を掛けて集計する、を説明しましたが、この方法を逆に使うと、10進数を2進数に変換することができます。
例として、これまでと同じ123という10進数を2進数に変換してみましょう。

基本情報技術者試験は、試験当日に電卓を使えないので、桁数の多い計算問題は出ません。2進数なら、せいぜい8桁(8ビット)くらいでしょう。

1から2倍、2倍、2倍、・・・と繰り返して、8桁まで2進数の桁の重みを書き出してください(128 64 32 16 8 4 2 1になります)。
これらの桁の重みのどれを集計すれば123になるかを考えて、集計する桁を1に、集計しない桁を0にすれば、2進数に変換できます。

123=64+32+16+8+2+1なので、変換後の2進数は01111011です。

図5 2進数の桁の重みのどれを集計すれば目的の10進数になるかを考える

10進数を2進数に変換する方法を2つ説明しましたが、自分にとってわかりやすい方を使ってください。
これ以降で示す問題の例では、2進数の桁の重みのどれを集計すれば目的の10進数になるかを考える方法を使っています。

10進数を2進数に変換することが必要な問題の例

試験には「以下の10進数を2進数に変換せよ」や「以下の2進数を10進数に変換せよ」といったストレートな問題は出ません。
何らかの分野の問題を解くときに、10進数と2進数の変換が必要になることがあるのです。「情報の基礎理論」は、基礎理論なのですから、様々な分野で必要とされて当然です。

問題の例を示しましょう。
以下は、「ネットワーク」の分野の問題ですが、この問題を解くには、10進数を2進数に変換できなければなりません。

問題例1(出典:H31春問32)

192.168.0.0/23(サブネットマスク255.255.254.0)のIPv4ネットワークにおいて,ホストとして使用できるアドレスの個数の上限はどれか。

ア 23  イ 24  ウ 254  エ 510

<解説>
IPアドレス(この問題ではIPv4の32ビットのIPアドレス)の上位桁は、ネットワーク(企業や家庭などのグループ)を識別するためのネットワークアドレスであり、下位桁は、ホスト(グループの中にある個々のパソコンやサーバなど)を識別するためのホストアドレスです。
サブネットマスクは、IPアドレスと同様に、32ビットの数値を8ビットずつ4つの部分に分けて、それぞれをドット( . )で区切った10進数で示したものです。サブネットマスクを2進数で示すと、IPアドレスの上位桁と下位桁の範囲がわかります。

255.255.254.0という10進数を2進数に変換してみましょう。
ドットで区切られたそれぞれの10進数を8ビットの2進数に変換するのですから、2進数の桁の重みをどのように集計すれば255.255.254.0になるかを考えます。

255=128+64+32+16+8+4+2+1です。
したがって、255を8ビットの2進数に変換すると11111111になります。

254=128+64+32+16+8+4+2です。
したがって、254を8ビットの2進数に変換すると11111110になります。

0を8ビットの2進数に変換すると00000000になります。

以上のことから、10進数の255.255.254.0を2進数に変換すると11111111.11111111.11111110.00000000になります。

2進数で示したサブネットマスクは、11111111.11111111.11111110.00000000のように上位桁に1が並び、下位桁に0が並んだものとなります。
1が並んだ部分がネットワークアドレスの範囲であり、0が並んだ部分がホストアドレスの範囲です。

ここでは、ネットワークアドレスが23ビットで、ホストアドレスが9ビットです。

この問題では、ネットワークで使用できるホストのアドレスの個数を求めます。
2進数では、1ビットで2通りの情報を表せ、ビット数が1ビット増えるごとに、表せる情報が2倍になります。
9ビットで表せるホストアドレスは、2×2×2×2×2×2×2×2×2=512個です。
ただし、すべての桁が0の000000000と、すべての桁が1の111111111は、ホストアドレスとして使えない約束なので、512-2=510個のホストアドレスが使えます。

したがって、正解は選択肢エです。

※補足説明1
サブネットマスクでは、この問題の255.255.254.0のように、255という10進数がよく出てきます。
255を8ビットの2進数に変換すると11111111になることを覚えておくとよいでしょう。255が11111111になることを覚えていれば、254は255より1だけ小さいので11111110であるとすぐにわかります。
※補足説明2
この問題の192.168.0.0/23の/23の意味も知っておきましょう。
これは、32ビットのIPアドレスの上位23ビットがネットワークアドレスであることを意味しています。このことから、32-23=9ビットがホストアドレスであることもわかります。

2進数を10進数に変換することが必要な問題の例

もちろん、「情報の基礎理論」の分野の問題でも、10進数と2進数の変換が必要になることがあります。

以下に、問題の例を示します。
この問題を解くには、2進数を10進数に変換できなければなりません。

問題例2(出典:H18秋問1)

1バイトのデータで0のビット数と1のビット数が等しいもののうち、符号なしの2進整数としてみたとき最大となるものを、10整数で表したものはどれか。

ア 120  イ 127  ウ 170  エ 240

<解説>
1バイト=8ビットです。
8ビットのデータで符号なし(2の補数表現を使ったマイナスの表記をしない)で最大の値は、すべての桁が1の11111111ですが、この問題では0のビット数と1のビット数が等しいという条件(この条件には、特に意味がないと思われます)があるので、11110000が最大の値です。
したがって、この問題は、2進数の11110000を10進数に変換するといくつになりますか? というものです(かなりストレートな問題ですね!)。

11110000で1になっている桁の重みを集計すると、128+64+32+16=240になります。

したがって、選択肢エが正解です。

※補足説明3
2の補数表現は、マイナス符号( – )を使わずに0と1だけでマイナスの値を示す方法です。2の補数表現の仕組みに関しては、今後の連載の中で取り上げます。
※補足説明4
8ビットの2進数と4ビットの2進数は、よく使われます。
8ビット=1バイトと呼ぶことからわるように、8ビットは、情報の基本単位だからです。
4ビットの2進数は、1桁の16進数に変換されるのでよく使われます。
2進数の11111111(8ビットのすべての桁が1)を10進数に変換すると255になり、2進数の1111(4ビットのすべての桁が1)を10進数に変換すると15になることを覚えておくとよいでしょう。
これらを覚えていれば、2進数の11110000=11111111-1111なので、10進数で255-15=240になることがすぐにわかります。

基本情報技術者試験の公開問題を見ると、過去に出題された問題の再利用が多いことがわかります。
したがって、試験に合格するために最も効率的で効果的な学習方法は、できなかった問題があれば、できるようになるまで練習することです。
もしも、今回取り上げた問題がすぐにできなかったら、できるようになるまで練習してください。

それでは、またお会いしましょう!

label 関連タグ
科目A試験は、
免除できます。
独習ゼミで科目A試験を1年間免除して、科目B試験だけに集中しましょう。
免除試験を受けた 74.9% の方が、
科目A免除資格を得ています。
科目A免除試験 最大 2 回の
受験チャンス !
info_outline
科目A免除試験 最大 2 回の
受験チャンス !
詳しく見てみるplay_circle_filled
label これまでの『やさしい基礎理論』の連載一覧 label 著者