2進数の求め方を説明しようとしたらできなかった話

例えば、10進数における「123」を2進数で表すとき。
はるか昔、↓こんな計算方法を習った。
f:id:Infoment:20220319155423p:plain
画像の引用元はこちら。
k3su.xyz
先日長男から、「何でこれで求まるのか」と訊かれて説明しようとして、
言葉に詰まってしまった。はて、何でだろう。分かっていたつもりだった
のに、うまく説明できない。検索してみても、「なぜ」の部分が語られて
いないものばかり。

そこで、考えてみた。
f:id:Infoment:20220319155928p:plain

例えば「123」を10で割ると、1桁目の数字が「余り」として現れる。
123=12×10+3
1桁目の数字を除いて100で割ると、2桁目の数字を10の位に持つ数字が
余りとして現れる。
120=1×100+20
これを繰り返せば、10^nで割った余りとして、n-1桁の数字を
求めることができる。

↓ 10進法の数字を10進法に変換するの図 ↓
f:id:Infoment:20220319161349p:plain

従って、2進数の場合も同じ操作を繰り返せば、変換した結果を得ること
ができると考えた。しかし実際、この理屈だと2回目の計算ですぐに破綻
してしまう。
↓ 余りが2になるの図
f:id:Infoment:20220319163606p:plain

なぜかと考えたが、おそらくは2進法に於いて「4で割る」こと自体が
ありえない操作なのだろうという、自分なりの結論に。

そこで、先の10進法における考え方を次のように修正した。
f:id:Infoment:20220319161846p:plain

先の計算で出た商を、その次の桁を求めるための「割られる数」にする。
これにより、10進数であれば常に10で割ればよいし、n回目の割り算で
現れるn-1桁目の数値は常に1桁の整数として求めることができる。

これを2進数の計算に当て嵌めると、こんな感じだ。
f:id:Infoment:20220319162431p:plain

なるほど、これが冒頭の計算方法に繋がる訳か。ここまで整理すると
自分の中で、冒頭の計算方法が「当たり前のことを言っている」こと
がわかる。そして冒頭の表記方法を考えた人、何て賢いんだと思わず
感嘆。

また、分かってしまえば何進法であっても、現在より小さな進数に
変換するときは同様に計算可能であることもわかる。
【5進数の場合】
f:id:Infoment:20220319163022p:plain

【16進数の場合】
f:id:Infoment:20220319163259p:plain

ということで、今日はちょっとスッキリした一日でした。

参考まで。