n進法とn進数

写真ACからもらってきた写真

知っているつもりだった進数について改めて調べてみたら「進法」という言葉が出てきて混乱しはじめました。ChatGPTさんに、ねほりはほり聞いてまとめてみました。*1

ざっくり違いをまとめると

n進法 = n進数の条件(基数、桁の重み、使える数字)

n進数 = そのルールに従って書かれた具体的な数字

ということでした。その他の用語もややこしかったので、馬なりにまとめてみました。

n進法、n進数で使う用語について

まず進法の表はこんな感じ↓

n進法

  • 基数がn
  • 桁の重みがn⁰,n¹,n²,n³・・・(続く)
  • 使える数字は「0~nより1小さい数まで」

というルールのこと

基数
数値を表現する際の桁上がりの基準となる数。位が一つ上がる毎に何倍になるかを表す。

桁の重み
桁が上がるタイミングの数値。その桁が1になった時の値。

なんで重くないのに「重み」なのかChatGPTさんに聞いてみたら、

「重い桁ほど数に大きく影響する」→「重み(weight)」で、たとえるなら「重み」は“責任の大きさ”みたいな感じ。

と教えてくれました。

わかりにくいわ!💢 最初に名前つけるときに、もーちょっとわかりやすい名前考えて欲しかった!

使える数字
2進数は0と1だけを使ってあらわされます。
8進数は0~7までの数字しかつかえないので、8以降の数字が紛らわしいです。
16進数は9~14がアルファベットになってるし、16以降はまた数値に戻ったりするので更にめんどくさいです。

進数は数字そのものなので、上の表の「2進数」以下の列の数字は全部2進数で、「8進数」以下、「16進数」以下の列の数字も同様です。

数字見ただけだと何進数の数字なのかわからないので、数学的には↓のように書くのだとChatGPTさんに教えてもらいました。

10進数(何もなし)2進数8進数16進数
1710001(2)21(8)11(16)

※下付の数字は括弧がなくてもいいけど、ある方がわかりやすい。

下に小さくつく数字は特殊文字なので、プログラミング的には↓のように、接頭辞をつける書き方で区別しているらしいですが、ブログは人間に読んでもらうためのものなので、「10001(2)」などの書き方で説明していきます。

10進数(何もなし)2進数8進数16進数
170b100010o210x11

「桁の重み」と「位」「桁」の関係

例)「1001(2)(10進数だと「9」になる2進数の数字)」

桁の重み(累乗)

10進数でその桁の重みの値を出すときの計算式です。

桁の重み(10進数)&「位」の名前(呼び方)

桁の重み」が「」を表します。でも「位の重み」とは言わないらしい。ややこしいなー。

数学的な桁の番号です。「1001(2)」は4桁目まであるので、「4桁の数字」です。

ここまで来て、

「○桁の数字」は整数だけっていう認識なんだけど、小数がある場合は桁とか桁数ってどうなるの?

と思ったので調べてみました。

1.「○桁目」という時の「桁」:「桁≒位」

まず「○桁目」という時の「桁」について、「ー(マイナス)1桁目、ー2桁目、ー3桁目…」とかになるのかと思って、ChatGPTさんに聞いてみたら、小数部分は一般的には「小数点第1位、小数点第2位・・・」になるらしいです。なんと、

~ 小数点第○位」は「位」ではなかった!😲 ~ 

桁≒位」&「桁の重みの”桁”=位」っぽいYO。 *2

例)「1001.011(2)(10進数だと「9.375」になる2進数の数字)」

↑どの進数でも「小数点第○位」の位置は一緒 *2

2.桁数の「桁」:「桁=数(単位)」

上の方にも書いたのですが、「○桁の数字」というのは「整数」に関してだけ言うイメージで、少数も含む数字の桁数については日常で話したことがなかったので、これもChatGPTさんに聞いてみました。

  • 普段の会話や数学では「桁」というと整数部分だけを指すことが多い
  • どうしても小数も含めて「桁数」を言いたいときは「有効数字○桁」や「ビット数○桁」と言うと誤解が少ない

大体↑のようなことを教えてもらいました。有効数字とビット数については別の機会に詳しく調べてみようと思います。

*1 ) ChatGPTさんに意見を伺った後、他の資料やWeb検索で確認するなどはしています。

*2 )「小数点第○位=位の名前」と説明しているとしているWebサイトも多かったけど、多分10進法だと「小数点第○位=位の名前」でも問題がないのでそうしているのだと思います。