見出し画像

読めばわかる n進数

私たちが普段使っている数は何進数でしょうか?

正解は10進数です!

n進数って何だろう?どういう仕組みなんだろうって、なかなかわからないものです。

わかってしまえば、なーんだという簡単なものです。
この記事を最後まで読んでいただければ、わかりますよ!

実は私たちの身の周りにも、10進数以外のもがたくさんあります。
何だと思いますか?
考えておいてくださいね。
後で紹介しますね。

では、いってみましょう!

順を追って、解説していきます。

進数って何?

「進む数」です。
「いや、なにが進むねん!」というツッコミもあろうかと思います。

何が進むかというと「桁」です。桁が1つ増えるのです。

「n進数」は、「1桁で表せる大きさがnに到達したときに桁上がりする」という数の表記方法のことです。

一番身近な10進数は、1桁で表せる数が0~9。
つまり、10になったら桁上がりしますよね。
だから10進数です。

ここまでOK?

まとめると

n進数 = 1桁で表せる数の最大値がn-1である。
つまり、10進数だとn=10ですから、1桁で表せる数はn-1=9。

ということがわかります。

2進数だと1桁で表せるのは、1までということになります。
0か1しか書けないということですね。
めちゃくちゃ桁が増えそうです。

10進数と2進数

2進数だとどれぐらい桁が増えるのでしょうか。
試しに10進数表記のものを2進数表記にしてみましょう。
( )内を10進数、【 】内を2進数で書きます。

(0)【0】
(1)【1】
(2)【10】
(3)【11】
(4)【100】
(5)【101】
(6)【110】
(7)【111】
(8)【1000】
(9)【1001】
(10)【1010】

という感じになります。
確かに桁上がりが早いですよね!

10進数と16進数

では次は16進数です。
1桁で0~15までを表現するのは、どうやるのでしょうか?
また、桁数増は10進数と比べて、遅くなるのかな?

2進数同様( )内を10進数、{ }内を16進数で書きます。
1~9は10進と16進は同じなので省略します。
10進数の10以降だけ見てみましょう。

(10){A}
(11){B}
(12){C}
(13){D}
(14){E}
(15){F}
(16){10}
(17){11}
(18){12}

1桁でn-1、つまり10進数表記の15までを表現します。
10以降はアルファベットのA~Fを使います。なるほど!ですね。

10進表記の16になった時に桁上がりして{10}となります。
桁上がりも遅いです。

何進数でも作れます

8進数は、1桁で表現できるのが0~7です。
8になったら桁上がりして10になります。

つまり10進数の9は、8進数だと11。
10進数の10は、8進数だと12です。

これを応用すれば、何進数でも可能です。

例として、5進数を考えてみましょう。

5進数は1桁で表現できるのが0~4です。
5になったら桁上がりして10になります。

10進数の6は、5進数だと11。
10進数の7は、5進数だと12です。

よくある勘違い

ここで誤解しないでいただきたいことがあります。
それは、n進数というのは表記方法だということです。
実際の数は同じものです。
書き方が違うだけで中身は同じです。

あなたが、姓で呼ばれようが、名で呼ばれようが、あだ名で呼ばれようが、あなた自身が変わることがないのと同じです。

試しに10進数の5を他の進数で書いてみます。( )内がnです。

5(10) 10進数表記だと5
101(2) 2進数表記だと101
12(3) 3進数表記だと12
11(4) 4進数表記だと11
10(5) 5進数表記だと10

なんか、こんがらがってきたかもしれません。
まあ、そんなもんだ!ということでいいでしょう。

IT業界でも使うのは、2進数、8進数、16進数ぐらいです。

ビット(bit)とバイト(byte)

※この項目はIT業界以外の方は、読みとばしてもいいかも。

コンピュータ内部では、すべて2進数で表されます。

めちゃくちゃ簡単に言うと、「電気が通っているか否か」で0か1かを表現しています。

コンピュータ内部の、この1桁のことをビット(bit)といいます。

そして、コンピュータは8bitを1つのまとまりとして扱います。
それをバイト(byte)といいます。

1byte=8bitです。

プログラマーは、ビット単位で操作するプログラムを作ることもあります。
2進数表記だと桁が多くて見づらいですよね。

そこで、16進数を使います。
1byte=8bitの前4桁と後4桁に分けて16進数表記するのです。

例:

2進数:10011111 → 16進数:9F

という感じです。

前半の1001を16進表記すると9です。
後半の1111はFです。

身の周りのその他の進数

時刻を表すときに使う分や秒。
この2つは60進数です。

「いや、2桁になってるやん!」というツッコミは当然です。

ちょっと冷静に考えてみましょう。

分や秒は0~59まで存在します。

16進数なら10~15のかわりにA~Fを使って1桁で書けました。
59までとなるとどう書けばいいのでしょうか。

アルファベットの大文字小文字全部を使わないといけません。

それに、「12時Z分f秒」とか言われてもわからんでしょ。

ということで、分や秒は60進数だけど10進表記をしています。

ですから、「桁」に該当するものを「時」「分」「秒」だと考えます。

これらが「桁」の代わりです。

「秒」が60になったら、1つ上の桁「分」が増える。
「分」が60になったら、1つ上の桁「時」が増える。

と考えるとわかりやすいと思います。

他にも「日」「月」「年」も「n進数」です。

これらについては、別途まとめた記事があるので、ご参照ください。

余談を3つほど

その1:
人間の指の数が10本だから10進数がわかりやすい。
だからずっと使われてきたのだと思います。
もし人間の指が12本だったら12進数が普段使いされているのでしょうね。

その2:
有名なゲーム「Final Fantasy」の略称は「FF」。これは、

1byteの最大数=11111111

16進表記したもの=FF

が由来とも言われています。
(あくまで想像の域を出ない噂です)

その3:
初期のファミコンソフト、ドラゴンクエストⅡの最大所持金は65,535ゴールドでした。

「やくそう」を売ろうが、モンスターを倒そうが、何をしてもそこからは増えない仕組みだったんです。

その理由は、2byteを使って表現できる最大数が65,535だからです。
つまり当時のドラゴンクエストⅡでは、所持金の項目を2byte=16bitを使って管理していたということがわかります。

ちなみに、10進数の65,535を2進数で表すと下記のとおりです。
見やすいように4桁ずつで区切って空白を入れています。

1111 1111 1111 1111 = 65,535

(to:IT業界人向け)
※符号なし整数です。符号ありだと-32,768です

いかがだったでしょうか。
最後までお読みいただき、ありがとうございます。

「わかった」という方は「スキ」を押してくれるとうれしいです!

いただいたサポートは、おじさんの活動費としてとんでもなく有用に使われる予定です。