「位取り記数法」
耳慣れない言葉ですが、「位取り記数法」とは「数」を表す方法のことです。私たちが日常で使っているのは「10進位取り記数法」、コンピューターが使うのは「2進位取り記数法」です。2つの違いは、数を数えるときに使える数字の種類です。まずはここからマスターしていきましょう。
10進位取り記数法
私たちは普段、「10進位取り記数法」というルールに従って数を表現しています。「10進法」という言葉を聞いたことはありませんか? これは、
- 0、1、2、3、4、5、6、7、8、9の10種類の数字を使う
- 並べた数字の桁は、右側から順に1の位、10の位、100の位……を表す
という決まりで数を表す方法です。数を数えるときは1、2、3……と順番に使って、9の次は1つ桁が上がって10、11、12……ですね。10種類の数字を使うから10進位取り記数法(または10進法)、このルールで表される数を「10進数」と言います。
たとえば、「2365」という値。これは「2」「3」「6」「5」というバラバラの数字ではなく、
1000が2個
100が3個
10が6個
1が5個
これらを全部足した値です。数式で表すと、
2365=(1000×2)+(100×3)+(10×6)+(1×5)
ですね。1000、100、10、1は「重み」と呼ばれる値で、各桁に意味を持たせるための重要な値です。重みの意味を理解するために、上の式をもう少し変形してみましょう。
2365
=(10×10×10×2)+(10×10×3)+(10×6)+(1×5)
=(10³×2)+(10²×3)+(10¹×6)+(100×5)
すべての桁の重みが「10の〇乗」であることに気付いたでしょうか。また、10の右肩に乗っている小さな数字(*1)は、右から0、1、2、3……と1つずつ増えています。これは「10進法では桁が1つ繰り上がるごとに、重みは10倍になる」ことを意味しています。
なお、重みの基本になる「10」は10進法の「10」で、この値を「基数」または「底(てい)」と呼びます。この後に説明する2進法(2進位取り記数法)や16進法(16進位取り記数法)であれば、基数はそれぞれ「2」、「16」になります。
〇〇の0乗
Pythonには「mのn乗」を計算する指数演算子「**」があります。たとえば、10の3乗は
と入力することで計算できます。同じように「10の0乗」や「2の0乗」を計算してみましょう。すると、答えは必ず「1」になります。何だか不思議な気がしませんか?
10n(10のn乗)は「10をn回掛け合わせる」という意味です。このルールに従うと、10¹(10の1乗)が「10」というのは納得できますね。では、100(10の0乗)はどうでしょう? 10を0回掛けるんだから10×0で、答えは0 ──ではありません。「10×0」は10に0を掛けたのであって、10を0回掛け合わせることとは意味が違います。
しかし、「10を0回掛け合わせる」というのはイメージしにくい話です。
そこで、図1を見てください。10の右肩に乗っている数字が1つ小さくなると、値は10分の1倍になりますね。この順番でいくと、10の0乗は「1」です。
同じように基数が「2」の場合を見てみましょう(図2)。2の右肩に乗っている数字が1つ小さくなると値は2分の1倍になるので、20(2の0乗)は「1」です。つまり、基数がどんな値でも「〇〇の0乗」は必ず「1」になります。