Little Strange Software

スマホアプリの開発を行う LittleStrangeSoftware のブログです。

10進数と2進数と16進数の話 and more…

 どうも!LSSです!!

 今日は、数の話をします。

 

 

まずは10進数の話から

小学校にあがる前か、その後ぐらいに、「すうじ」について皆さん覚えられたかと思います。

今日の話はまず、そのおさらいから始まります。

 

1(いち)、2(に)、3(さん)、4(よん)、5(ご)、6(ろく)、7(なな)、8(はち)、9(きゅう)

 

1に1を足すと2になり、2に1を足すと3になります。

「1を足すと」じゃなくて「次の数」として覚えたかもですね。

 

ところで「9の次の数は?」というと…10(じゅう)ですね。

ここで、これまで1文字で済んでいたのが突然、2文字になります。

この「2文字」の事を「2桁」ともいいますね。

 

そして「10の次の数は?」というと11(じゅういち)になります。

…また最初の1(いち)がくっついてきました。

その次は12、13、と最初の頃に使った数字が「じゅう」にくっついて同じ順番に出てくる事になります。

 

 

0(ゼロ)も仲間に入れてあげて!

1桁の数字が、1,2,3,4,5,6,7,8,9。

2桁になってからが、10,11,12,13,14,15,16,17,18,19。

 

1の位が繰り返されていますが、すると10に対応する1桁の数字がいない…?って事になります。

ここは0も仲間に入れてあげます。

 

すると、

1桁の数字が、0,1,2,3,4,5,6,7,8,9。

2桁になってからが、10,11,12,13,14,15,16,17,18,19。

 

スッキリしましたね^^

 

 

1桁の数字は10種類ある!

0を仲間に入れた事で、0~9の数字は10種類ある、という事になります。

10種類使い切ったところで桁が上がり、99まで数えると今度は100(ひゃく)という3桁の数字を使う事になります。

 

0~9までが10種類、そして10の位でいうと一桁の数字(9とか)を0として扱うと、

00~99までの100種類の数字を使った後で3桁になります。

 

 

10進数とは

このように、「10で桁があがり、10を10使ってまた桁が上がる」という数字のルール、これを10進数といいます。

 

かなーーーり昔から、ほとんどの人類がこの10進数を使い、慣れ親しんできました。

文明の起源が異なっても、やはり10進数が使われている理由としては、
「人間の両手の指が合わせて10本あるから」
という説が有力です。


※ところで、日本で「万・億・兆」と4桁区切りの単位がふられてるのに、欧米では「サウザンド(キロ)・ミリオン(メガ)・ビリオン(ギガ)」って3桁区切りになってるのはなぜ???

 

 

もしも、10じゃなかったら…?

つまり、「10で繰り上がる10進数じゃないと数学は成立しない」というわけではなく、例えば「5つあるりんごはどう数えても5つある」んです。

それを「5」という(10進数の)数字で表現するか、別の表現方法を用いるか、で。

 

で、10進数以外の進数、2進数の話に入ります。

 

 

2進数。0と1以外の数字使用禁止ルール

10進数は10で繰り上がります。

じゃあ「2進数だったら?」というと、案の定「2で繰り上がる」表現方法です。

 

つまり、↓こうなります。

0(ゼロ)の次は1(いち)、1の次は10(いちゼロ)、10の次は11(いちいち)、11の次は100(いちゼロゼロ)。

 

あっという間に3桁に達してしまいましたねw

ちなみに「同じ数」を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進数、右が2進数)

 

 

2進数って必要?

すぐに桁上がりしてしまい、文字数を多く使ってしまう2進数。

そんな数え方に需要あるの?と思われるかも知れませんが、これが大アリにアリです!

 

身近なところではコンピュータ。

この場合、パソコンに限らず、スマホでも電卓でもそうなんですが、そもそも
「電気信号を使って計算してくれる機械を作ろう!」
という、そもそものところから、「電気が通じてるか通じてないか」を判断材料にしているので、内部的には2進数で処理されています。いまだに。

 

他にも「アリかナシか、それだけ判断できればいい」という場面では、2進数の方が都合がいいですね。

 

 

16進数、なんていうのもあります

2進数は10進数に比べて1桁で表現できる範囲が小さいため、すぐに桁が増えてしまいましたが、逆に1桁で表現できる範囲が大きい「16進数」というのもあります。

 

16種類の数字を使った後で桁上がりするのが16進数ですが、1桁の数字は「0~9」の10種類しか用意されていないので、足りない部分はABCDEFで補います。

 

先ほどの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

(左が10進数、真ん中が2進数、右が16進数)

 

ちなみに、この調子で数を増やしていくと、2桁の16進数最大の数「FF」は

255 11111111 FF

という事になります。

10進数だと3桁必要、2進数だと8桁必要ですが、16進数だと2桁で済んでしまうんですね^^

 

なお、4桁の2進数最大の「1111」が1桁16進数最大の「F」であり、8桁の2進数最大の「11111111」が2桁16進数最大の「FF」となっています。
これは「2の4乗(2を4回掛け合わせた数)が16」だからです。
「なんで?」っていう部分は割愛しますw

 

 

なんとか進数、の「なんとか」の部分が大きいほど…

より大きい数を、より少ない桁数で表現できる、特に
「16進数は2進数の桁数の4分の1の桁数で済む」
というところまで書きました。

 

応用例としては例えば、昨日公開した

でも使っています。

  • 壁があるかないか、のデータを表現するには、2進数で事足ります。
  • 更にそれを16進数に置き換える事で、データ文字数が4分の1で済みます。

 

パラレル迷路は、迷路データとして合計120枚の壁の有無を示す必要がありましたが、それを

6e6736666fedeef1efb8d7f610a8e1

のような「16進数30桁(30文字)」で済ませてるんですね^^

 

なお、もしも「256進数」なんてものを用意して使用した場合、半分の15文字で済む事になります。(←コンピュータでやるには、あまり意味のない戯言になりますw)

 

プログラム的な意味では、既存利用されている「〇進数」に囚われず、文字や記号をかき集めてオリジナルの「〇進数」を作って使うのも可能ですね。
0~9、a~z、A~Zだけでも62種類カバーできますし、さらに順番をかき混ぜると「簡易暗号化」にもなりますw

 

 

というような記事を

はてなブログ仲間の さじさん(id:conasaji)からTwitterで、 

ってネタをふっていただいたので、記事にしてみました^^

 

あと、パラレル迷路関連では「データの受け渡しにURLを使う」の解説として、URLの基本的なところから書く、という記事ネタもあったりします。
スマブラにマイクラが参戦!?っていう凄いニュースも記事ネタにしたい気マンマンだったりしますがwww)

 

 

 

 

ってなとこで、今回はこのへんで!

次回もまた、よろしくお願いします^^