プログラムで扱う数値
パソコンなどの電子機器では基本的に0か1の値で全てを判断しています。
なのでプログラム上の数値も 0 と 1 で全てが構成されています。
仕組みを知らない人は 0 と 1 だけでどうやって計算を行うの?
という疑問が出るかと思います。
そこで使われるのが2進法です。
2進法とは 0 と 1 だけで数値を表す仕組みです。
パソコンなどの機器は基本的に2進法で処理が行われています。
進法の種類
進法 | 説明 | 例 |
---|---|---|
2進法 | PC等の電子機器が扱われる数値の形式です。 0 と 1 の2種類で数値を表すので2進法と呼びます。1 を超えると 0 に戻り1つ上の桁の数値が増えます。 PC上での数値は内部的にこの形で扱われています。ただし2進法で表記すると人には直観的に理解することができません。 そのためプログラムのコード上では10進法や16進法で記述します。 |
0011 1101 0011 1010 1111 1111 |
10進法 | 最も人が理解しやすい数値の形式です。 0 ~ 9 までの10種類で数値を表すので10進法と呼びます。9 を超えると 0 に戻り1つ上の桁の数値が増えます。人が理解しやすい数値なのでプログラム上でも多用します。 |
3 13 58 255 |
16進法 | 2進法と親和性の高い数値の形式です。 0 ~ 9 と A ~ F (9の次がAとなる)の16種類で数値を表すので16進法と呼びます。F を超えると0 に戻り1つ上の桁の数値が増えます。PC上で2進法的な考えの計算を行う場合は基本的に16進法で数値を記述します。 ※2進法と16進法の親和性については後述します。 |
3 D 3A FF |
これらがプログラムでよく使用される進法です。
基本的に2進法で直接数値を記述することはありませんが、2進法を利用した計算は頻繁に出てくるので必須の知識となります。
それでは次の項でそれぞれの変換方法を学んでいきましょう!
10進法→2進法
2進法は2になるたびに桁を上げて0と1で全てを表します。
4 を2進法で表すと 100 となります。
桁が上がると桁が単純に2倍になるので次のような計算式になります。
※桁が上がるごとに2のn乗の値になります。
1 * 4 + 0 * 2 + 0 * 1
太字の部分が2進法の 0 と 1 の箇所です。
どこまで桁が増えても計算方法は一緒なので落ち着いて考えれば意外と簡単なんです!
37 を2進法で表すと 100101 になります。
計算式で表すと下記です。
1 * 32 + 0 * 16 + 0 * 8 + 1 * 4 + 0 * 2 + 1 * 1
数値が大きくなっても単純ですよね!
簡単な変換方法
10進法から2進法への変換はもう少し簡単にする方法があります。
考え方は簡単でひたすら2で数字を割っていくだけです。
では今回は 11 を2進法に変換してみましょう!
11 / 2 = 5 で余りが 1
ここで出た余りを残しておきます。
更に割り算を続けます。
5 / 2 = 2 で余りが 1
最初の1と合わせて 11
2 / 2 = 1 で余りが 0
これも合わせて 011
1 / 2 = 0 で余りが 1
これで全ての余りを合わせて 1011
この 1011 が2進法での 11 を表す値になります!
ただ2で割り算をして余りを繋げただけです。
2進法への変換は凄く簡単だと思いませんか?
2進法→10進法
2進法から10進法への変換も難しいことはありません。
単純に掛け算を繰り返していくだけです。
1101 なら次のように計算していきます。
1 * 2⁰ = 1 * 1 = 1
0 * 2¹ = 0 * 2 = 0
1 * 2² = 1 * 4 = 4
1 * 2³ = 1 * 8 = 8
桁が上がるたびに2倍した値と 0、1 の値を掛け算していきます。
これらの合計が10進法の値となります。
1101 = 1 + 0 + 4 + 8 = 13
これも落ち着いて計算していけば難しくないですね!
10進法→16進法
16進法は 0 ~ 9 と A ~ F の16文字の情報で成り立つ数値です。
10進法から16進法への変換は直観的に分かり難い部分があります。
15 を 16進法にすると F となります。
これは単純に 10 ~ 15 を A ~ F と置き換えているだけです。
では 45 を16進法に変換してみましょう。
45 / 16 = 2 余り 13
2 / 16 = 0 余り 2
次にそれぞれの余りを16進法の値に置き換えて繋げていきます。
2 = 2
13 = D
これで 45 = 2D という事になります。
16で割った値を16進法の表記にする際に10以上の値は少し戸惑うかもしれませんが、要領が分かれば簡単だと思います。
16進法→10進法
これも10進法からの変換を逆に計算していきます。
では 2E3 という値を10進法に変換してみましょう。
先ずは 2E3 をそれぞれ桁ごとに10進法の値に変換します。
2 = 2
E = 14
3 = 3
次にこれらの桁に合わせて 16 のべき乗で掛け合わせていきます。
3 * 16⁰ = 3 * 1 = 3
14 * 16¹ = 14 * 16 = 224
2 * 16² = 2 * 256 = 512
これがそれぞれの桁の値です。
最後はこの合計値を求めることで10進法への変換が完了します。
3 + 224 + 512 = 739
16進法では掛け合わせる値が大きいので少し難しく感じますね。
ただ計算は単純なので落ち着いて計算しましょう!
2進法↔16進法
実は2進法と16進法は親和性が高いので意外と簡単に変換できてしまいます。
例えば F を2進法に変換する場合で考えてみましょう。
この場合は先ず10進法に変換してから2進法します。
F = 15 = 1111
このように 1111 となります。
勘の鋭い方はこの結果から気付いた人もいるかもしれませんね!
16進法での F は一桁で表せる最大の値です。
同じく 1111 は2進法の4桁で表せる最大の値です。
つまり16進法の1桁は2進法の4桁と同等の情報量となるのです。
16進法→2進法
では次に A5BE の値を2進法に変換してみましょう。
先ずそれぞれの桁を2進法に変換します。
A = 1010
5 = 0101
B = 1011
E = 1110
桁ごとの2進法に変換できれば後は簡単です。
A5BE = 1010 0101 1011 1110
全ての値を横に並べるだけで2進法に変換できてしまうのです。
2進法→16進法
次に2進法の値を16進法に変換してみましょう。
1100001011111010
この値を16進法にするには4桁ごとに値を区切って16進法の値に置き換えていくだけです。
1100 | 0010 | 1111 | 1010
1100 = C
0010 = 2
1111 = F
1010 = A
最後はこれを並べるだけです。
1100001011111010 = C2FA
2進法と16進法の変換は思った以上に簡単にできたではないでしょうか。
これらがプログラムでよく用いられる進法の変換です。
知らなければ難しく感じますが、慣れると簡単なので皆さんもこれを機に学んでみてはいかがでしょうか?