【第1回】10進数、2進数そして16進数

こんにちは。

基本情報のテクストをパラパラと開いてみる。するとなんとまぁ文系の身からすると目眩がするような数字と英語とカタカナと少しの漢字とひらがなで作られた文章の羅列。まだ哲学書の方がわかりやすく書いてあるのではないんじゃないかな…。

 

まぁさて置き、その重い腕をやがて三日坊主になるであろう1日目のモチベーションで上げてみてページを捲ってみる。

 

基本情報技術者試験で問一に置かれる進数の事についでだ。

 

10進数とは

0から9までの10個の数字を使って数を表現する。0から9までの10個の数字を使って数を表現する。
数は、0,1,2,3,4,5,6,7,8,9と順に増え、次に位が増えて10になる。

 

ふむ、つまりは俺達が普段日常生活で使っているものこそ10進数ってわけなんだな。なるほど。

俺はまるで数字と無縁に生きてきたからこのレベルから納得してしまう。もしかしたらそういう人も多いんじゃないか?

 

2進数とは

 

2進数は、数字0,1の2個の数字を使って数を表現する。
数は、0,1と順に増え、次に位が増えて10になる。
このようにして、2進数は、2の0乗(1)、21乗1(2)、2の2乗(4)、2の3乗(8)…と位が繰り上がります。(( )内は10進数での数)

はてなブログでの乗算の書き方がわからん!(わかったら修正します)

 

のは置いといて、いや分からんよ。ここで躓くわってなった。雑魚いな文系。

 

解説すると、まず2進数ってのは0と1でしか表現出来ないんですよ。これくらいは俺でも知ってたけど(ボソッ)

 

だから10進数から2で割ったあまりを求める。

 

例えば10進数でいう61を2進数にしてみる

 

61÷2=30余り1

31÷2=15余り0

15÷2=7余り1

7÷2=3余り1

3÷2=1余り1

1÷2=0余り1

 

こういう風に、割り算の答え(商)が0になるまで繰り返す。これを0の方から並べると111101となる。

 

ほう、まぁタネはわかるな。なるほどなるほど。

 

というわけで実際の過去問を解いてみよう。

 

 

 

例題

(基本情報技術者 平成27年度秋季 問一から引用)

【問】10進数の演算式7÷32の結果を2進数で表したものはどれか

 

(選択式なんだが選択肢は割愛します)

 

2進数は2で割ると1桁下がるという法則があるらしい。それもそうか、1と0しかないから下がるんだな。

つまり、÷32=÷2÷2÷2÷2÷2になって5桁下がることになる。

つまり7を2進数にしてそこから5桁下げちまえばいいってことだ。

7÷2=3余り1

3÷2=1余り1

1÷2=0余り1

で111だから、それを5桁下げた0.00111が正解になるんだな。なるほど。

 

2進数から10進数に変換する

 

これは2進数の各桁に桁の重みを掛けて集計するだけ

例えば2進数の111101を10進数にする場合

つまり

32×1=32

16×1=16

8×1=8

4×1=4

2×0=0

1×1=1

 

の答えを集計すると61になる訳ですね。はえ〜。

 

桁の重みってのは2のべき乗だから1.2.4.8.16.32.64.128っていう風になってく奴ってわけですね。

 

 16進数

16進数は、0から9までの数字とAからFまでのアルファベットを使って数を表現する。
数は、0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,Fと順に増え、次に位が増えて10になる。
Aは10進数で10、Bは10進数で11、Cは10進数で12、Dは10進数で13、Eは10進数で14、Fは10進数で15。
このようにして、16進数は16の0乗(1)、16の1乗(16)、16の2乗(256)、16の3乗(4096)…と位が繰り上がります。(( )内は10進数での数)

うん…うん。まぁ理屈はわかる。じゃあ2進数からどうやって16進数に変換するんだ?

その方法は2進数の下位桁を4桁ずつ区切って、2進数の各桁の重みに掛けて集計するっていうものだ。

 

例えばにしんすうの01011011を16進数に変換する場合

まず最初の4桁に例の桁の重みを掛ける

 

0×8=0

1×4=4

0×2=0

1×1=1

 

これの答えを足して5

 

次の4桁

1×8=8

0×4=0

1×2=2

1×1=1

 

で答えは10進数でいう11だけど16進数だとBに当たるから答えはB

 

つまり答えは2Bって訳だな

 

今日はここまで!