離散数学1~2 進数の表現と基数変換の方法~

snack
snack

離散数学とは、ざっくり言うと離散的な(飛び飛びの)数字を扱う数学のことっす。その代表例として2 進数があるっす。

ボキタロー
ボキタロー

飛び飛びの数字ってどういうこと?

snack
snack

私たちが普段使っている数字あるっすよね?

ボキタロー
ボキタロー

1,2,3,4,5・・・ってやつ?

snack
snack

それは連続している数字で人間が理解しやすい形なんす。しかしコンピューターは0か1の2通りしか判断できないんすよ。なので、コンピューターの処理を理解するためには2進数という考え方を知っておく必要があるんす。

目標・基数の基本的な考え方を理解する。
・集合の基本的な考え方を理解する。
説明・コンピュータで扱う数値やデータに関する基礎的な理論を知るため,2 進数に関する表現と演算,集合と論理演算の基本的な考え方を理解する。
離散数学の概要

基数とは

基数とは、桁が繰り上がるところをいいます。私たち人間は一般に10のところで桁が繰り上がる数字を使っていますが、これを10進数といいます。つまり、10進数の基数は「10」ということです。

一方、コンピューターは「0」か「1」の2通りしか判断できません。そのため、コンピューターの処理では「0」と「1」の2つの数字を使って表す2進数が用いられます。2進数では2のところで桁が繰り上がるため、2進数の基数は「2」ということになります。

例えば、10進数の「11」は、2進数では「1011」となります。

2進数では「1011」を「せんじゅういち」ではなく「イチゼロイチイチ」と読みます。

ボキタロー
ボキタロー

でもこれじゃあ、2進数の「1011」(イチゼロイチイチ)なのか、10進数の「1011」(せんじゅういち)なのかわからないよ。

そこで、基数が何かを表すために、10進数の表現は(1011)10 、2進数の表現 は(1011)2 というように書きます。

10進数と2進数の表現

10進数2進数
00
11
210
311
4100
5101
6110
7111
81000
91001
10進数2進数
101010
111011
121100
131101
141110
151111
1610000
1710001
1810010
1910011
snack
snack

上の表を見て気づいた人もいるかもしれないっすけど、2進数では「2」以上の数字は登場しないっす。

基数変換

10進数を2進数へ変換したり、2進数を10進数へ変換したり、このようなn進数からm進数への変換を基数変換といいます。

10進数から2進数への基数変換

10進数から2進数への基数変換については2つの方法を紹介します。参考書などでよく紹介されるのは「方法②」ですが、個人的には「方法①」がおすすめです。

方法①

この方法では「それぞれの桁ごとに2のn乗が何個あるのか?」ということを考えます(2進数の場合は0個or1個)。

10進数から2進数への基数変換

例えば(11)10 の場合は、23 が1個、22 が0個、21 が1個、20 が1個あります。これを並べると2進数の(1011)2 となります。

2のn乗10進数の数字
201
212
224
238
2416
2532
2664
27128
28256

2倍になっていくだけなので大丈夫だと思いますが、2の8乗(=256)まではすぐに思い浮かぶくらいにはなっておいてほしいところです。

2の0乗は「1」になるという点に注意してください。

方法②

10進数から2進数への基数変換

この方法は、10進数の数を商(答え)がゼロになるまで2で割っていって、余りを逆に並べるという方法です。

参考

簡単なのは「方法②」ですが、方法①は2進数から10進数への基数変換、基本情報技術者試験や応用情報技術者試験で出題される2進数の小数と分数の計算にも使えるので、知っていると便利です。

2進数から10進数への基数変換

先に説明した方法①と同様に考えていけばOKです。すなわち「それぞれの桁ごとに2のn乗が何個あるのか?」ということを考えます。

2進数から10進数への基数変換

一番右の桁は2の0乗になる点に注意しましょう。

2進数同士の加算・減算

2進数同士の加算

(1010)2と(11)2の加算を行う例で考えていきます。

2進数同士の加算

このとき、「1+1」は2ではなく「10(イチゼロ)」になる、つまり桁が一つ繰り上がるという点に注意です。

2進数同士の減算

(1010)2から(11)2 を減算する例で考えていきます。同じ桁で「0-1」となる場合は、上の位から桁を借りてきます。この考え方は10進数と同じなのですが、借りてくる数字は「10(イチゼロ)」(10進数の2)であるということに注意が必要です。

2進数同士の減算

赤字の数字はわかりやすいように10進数で表しています。つまり「2」は2進数の「10(イチゼロ)」を意味します。

snack
snack

ちょっと難しいっすね。このやり方がしんどい人は、いったん10進数に変換してから加算・減算をして、その答えを再び2進数に変換するという方法でもいいっすよ。

確認○×問題

問1

10進数 155 を2進数で表したものは 10011011 である。

答え:〇

「それぞれの桁ごとに2のn乗が何個あるのか?」を考えます(2進数の場合は0個or1個)。そうすると、27 が1個、24 が1個、23 が1個、21 が1個、20 が1個あります。これを並べると(10011011)2となります。

基数変換
【考え方】

28 は256となり、155をオーバーしてしまうので、27 (=128)からスタートとします。

残りは27(=155-128)なので、次に24 (=16)がきます(25 だと32となり、27をオーバーしてしまうため)。

残りは11(=27-16)なので、次に23 (=8)がきます。

残りは3(=11-8)なので、次に21 (=2)がきます。

残りは1(=3-2)なので、次に20 (=1)がきます。

別の解き方

別の解き方として、10進数の数を商(答え)がゼロになるまで2で割っていって、余りを逆に並べるという方法もあります。

基数変換

問2

二つの2進数 01011010 と 01101011 を加算して得られる2進数は 11000101 である。ここで、2進数は値が正の8ビットで表現するものとする。

答え:〇

「1+1」は2ではなく「10(イチゼロ)」になる、つまり桁が一つ繰り上がるという点に注意しましょう。

2進数同士の加算

問3

2進数 10110 を3倍したものは 1000010 である。

答え:〇

まず、2進数 10110 を10進数に変換します。24 が1個、22 が1個、21 が1個あるので、合計(22)10 となり、これを3倍すると(66)10 となります。

基数変換

(66)10 を再び2進数へ変換すると、(1000010 )2 となります。

基数変換