f:id:mamori_yuto:20181027120143j:plain


ここでは、2進数などの基数について解説します。

1.2進数とは

我々が日常的に使っている数字は、10進数を使っています。一方、コンピュータでは、0と1の2つの数字だけを使います。これを2進数と言います。
※参考ですが、2進数以外に、コンピュータでの処理を表現するときには、たとえばネットワークでは16進数も使います。
進数の意味としては、0と1の2つの数字で表すものが2進数、0~9の10個の数字で表すものが10進数、0~9、A~Eの16個の数字(と文字)で表すのが16進数です。

Q.2進数、10進数で表してみよう。
10進数 ---- 2進数 ---- 16進数 
0        0         0
1        1         1
2        10        2
3        11        3
4        100      4
5        101      5
6        110      6
7        111      7
8        1000      8
9        1001      9
10       1010        A
11       1011       B
12       1100       C
13       1101       D
14       1110       E
15       1111       F
16       10000    10
17       10001    11
18       10010    12
19       10011    13
20       10100    14

Q.では問題です。我々は、10進数を当たり前に使っています。234という数字をよくみてください。4は4個を意味す。でも3は3個を意味しませんよね。30個を意味します。2も同じで、200を意味します。この観点で、234という数字を、10と2,3,4などの数字の計算式で表してください。

A.簡単ですね。
234=2×10の2乗 + 3×10の1乗 + 4×10の0乗  ※10の0乗=1

こうなります。まずはこの事実を改めて認識してください。

2.基数とは

基数とは、桁が上がる基準となる数のことです。この言葉だけ聞くとよくわからないでしょうが、我々が日頃の買い物などで使っているのは10進数で、この基数は10です。また、2進数の基数は2で、16進数の基数は16です。

たとえば、2という数字を例に考えます。
10進数では「2」と表現され、桁が変化しません(つまり1桁)。ですが、2進数で2を表現すると10になり(桁が上がります)。
同様に、15は10進数では15となって2桁ですが、16進数ではFです。16に満たないので桁が上がらず1桁です。
f:id:mamori_yuto:20181027120212j:plain


16進数の場合は、16になってはじめて桁が上がるということですね。

 

その通りです。ですから、15までの数を1桁で表現できなければいけません。
そこで、10→A、11→B、12→C、13→D、14→E、15→Fと表現されます。
逆に、2進数は2という数字で桁が上がってしまいます。なので、2以上の数字は要りません。だから、0と1だけで表現されます。

考え方の基本として、基数という考えをしっかりと押さえましょう。
2進数の2は、「2で桁が上がる」のです。10進数の場合は10で桁が上がります。
その結果として、以下が言えます。
・10進数の場合は0~9までの数字があればよい
・数字は 以下のように、10の階乗を使って表現できる。
234=2×10の2乗 + 3×10の1乗 + 4×10の0乗 

ただ、基数という言葉の意味は少しわかりにくい面があります。
基数という言葉は、あまり深く考えず、「何進数なのか?」と置き換えて考えればいいでしょう。
また、0と1の2つの数字で表すものが2進数、0~9の10個の数字で表すものが10進数、0~Eの16個の数字(と文字)で表すのが16進数と考えておくと、実際のその通りですし、分かりやすいと思います。

Q.10進数で30という数字を2進数と16進数で表しましょう。

A.2進数では11110、16進数では1Eです。

3.基数変換の方法(10進数に変換)

(1)基数変換の方法
2進数を10進数にする場合や、16進数を2進数にする方法を解説します。(このように、基数を変えることを基数変換と言います。ただ、言葉は覚えなくてもいいでしょう)

方法は、すでに述べた以下の方法を活用します。
234=2×10の2乗 + 3×10の1乗 + 4×10の0乗 
2進数の場合でも同じです。
101=1×2の2乗 + 0×2の1乗 + 1×2の0乗 = 4 + 0 + 1 =5

(2)小数の場合
小数点が入った場合はどうなるでしょうか。実は計算方法は同じです。
小数点以下は、マイナス乗を加えていきます。
言葉で解説するよりも、実際の変換を見てもらった方が分かりやすいと思います。

基数変換
★2進数の処理結果は9.5ではなく、5.5の間違い
10進数で解説します。このように、各位の値(1の位が8、10の位が2)に、基数の累乗(1の位は10の0乗、10の位は10の1乗)をかけて、足したものが10進数の値になります。

4.基数変換(10進数を変換)

では、次に10進数を2進数や16進数に変える方法を説明します。
考え方は上の図と同じです。たとえば、上の変換の小数点を無くしたものですが、5という数字や298という数字は、以下の式で表されます。なので、2進数では5、16進数では12Aとなります。
kisuu
応用情報技術者試験を勉強する成子
 
でも、その計算をどうやるのですか?
多くの方がやっている方法ですが、以下のように、基数で値を割っていきます。これ以上割れなくなったらおしまいで、その余りを逆から見て行くと、進数変換ができます。
このテクニックはとても有用なので、覚えておきましょう。
下図のように、10進数の5は2進数で101、298は12Aになることが分かります。
2

5.基数変換(10進数を変換:小数)

10進数の0.375を2進数にするにはどうしたらいいのでしょうか。
2進数の小数を復習しましょう。
2
このように、2進数で表された小数は、2倍していくと1になります。また、上記の小数点第3位のところをみてもらうとわかるように、小数点第三位のところが1であれば、2を3倍すると1になります。
以下をみてください。これをみると、なんとなく、両方を2倍していくと計算方法が見えてこないでしょうか。
2sinsuu
では、2倍していきましょう。
0.375 2倍 ⇒0.75  1にならないので、小数点第1位は0
     さらに2倍 ⇒1.5 1になったので、小数点第2位は1
     残りの0.5を2倍 ⇒1 1になったので、小数点第3位は1

2進数表記で0.011となります。 
位は10の1乗)をかけて、足したものが10進数の値になります。

6.シフト演算

では、シフト(shift)とは「移す」という意味で、ビットを右や左にずらします。
たとえば2進数の場合
001100(=12) を左に1ビットずらすと2倍、2ビットずらすと4倍になります。
→左に1ビット 011000(=24)
→左に2ビット 110000(=48)
001100(=12) を右に1ビットずらすと1/2倍、2ビットずらすと1/4倍になります。
→左に1ビット 000110(=6)
→左に2ビット 000011(=3)

6.基数に関する過去問

(1)H20秋SW午前問1
問1 基数変換に関する記述のうち,適切なものはどれか。
ア 2進数の有限小数は,10進数にしても必ず有限小数になる。
イ 8進数の有限小数は,2進数にすると有限小数にならないこともある。
ウ 8進数の有限小数は,10進数にすると有限小数にならないこともある。
エ 10進数の有限小数は,8進数にしても必ず有限小数になる。



有限小数と無限小数に関しては、別途記事を確認ください。

正解はアです。

(2)H28春AP問2
問2 10進数123を,英字A~Zを用いた26進数で表したものはどれか。ここでA=0,B=1,…,Z=25とする。
ア BCD
イ DCB
ウ ET
エ TE



基数である26で割り算をします。
すると4(=E)と19(=T)であることが分かります。
1
【正解】ウ


(3)H27春AP問2
問2 2桁の2進数x1x2が表す整数をxとする。2進数x2x1が表す整数を,xの式で表したものはどれか。ここで,int(r)は非負の実数rの小数点以下を切り捨てた整数を表す。
1-1H27-1




【正解】ウ
(4)H25春AP問1
問1 αを正の整数とし,b=a2 とする。αを2進数で表現するとnビットであるとき,bを2進数で表現すると高々何ビットになるか。
ア n+1   イ 2n   ウ n2   エ 2n




難しい問題ですね。
分からない場合は、数字を当てはめるといいでしょう。a=10、b=100
a(=10)を2進数にすると、1010で4ビット、n=4
b(=100)を2進数にすると、1100100で、7ビット
ア n+1=5
イ 2n=8
ウ n2 =16
エ 2n=16  であり、最も近いイがなんとなく答えではないかとあたりをつけることができる。
【正解】イ