進法とは、数をのべきの和(各係数は)で表す記法のことです(は以上の整数)。 私たちが普段使う10進法はの場合で、個の記号(〜)を使い、各桁がの位を表しています。
1 位取り表示の存在と一意性
定義 1.1.を以上の整数とする。正整数の 進表示 (base-n representation) とは、整数と整数による表示
である。を底、を各桁の数字といい、表示をと書く。桁数はである。の表示は一桁のとし、負整数の表示は、その絶対値の表示の前に負号を付ける。底がを超える場合には、以上の数字にもそれぞれ一つの記号を割り当てる。
定理 1.2.を以上の整数とする。すべての整数は、ただ一通りの進表示をもつ。
証明. 正整数に対してと置く。である間、§A4.1 定理 2.1によって
を満たす商と余りを取る。であるから、正整数である商は各段階で減少し、有限回の操作の後にとなる。このときであり、なのでである。各等式を順に代入すると
を得る。
任意の進表示において、最下位の数字はをで割った余りに等しく、残りの桁が表す数はその商に等しい。除法の原理により、余りと商はただ一通りに定まる。商について同じ操作を繰り返すと、すべての数字が一致する。一方の表示だけに桁が残ることは、先頭の数字がでない正整数の表示がを表すことになるため、起こらない。したがって桁数も一致する。と負整数については、定義した表示の規約から存在と一意性が従う。▨
2 10進から2進への変換
正整数を底で割り、商をさらに同じ底で割る操作によって、最下位の桁から順に数字が求まります。
例 2.1.を2進法で表すために、で割る操作を繰り返す。
- 余り
- 余り
- 余り
- 余り
商がになったので、操作を終える。余りは最下位の桁から順にと求まる。表示では最上位の桁を左に書くので、余りを求めた順と逆に並べるととなる。
各桁に対応するべきを掛けて足すと、10進表示に戻る。
3 2進法の四則計算
公式 3.1.を以上の整数、を以上の整数とする。位の係数をで割った商を、余りをとすると、、であり、
と書き換える。位にはを残し、次の位へを加える。逆に、一つ上の位のを下の位のに書き換えても、表す数は変わらない。
例 3.2. 以下の数字列はすべて2進表示とする。
を計算する。一の位のはなので、一の位にを置き、次の位にを加える。次の位も、その次の位もとなる。最上位ではとなるので、答えはである。
例 3.3. 以下の数字列はすべて2進表示とする。
を計算する。桁をそろえるために、引く数の左にを添えてと書く。一の位のからを引くために、二の位のを一の位のに書き換える。一の位の差はとなる。二の位はになっているので、八の位から四の位を経て借り入れる。二の位の差は、四の位の差はとなる。八の位では十六の位から借り入れてとなり、答えはである。
例 3.4. 以下の数字列はすべて2進表示とする。
分配法則により、は、と二桁左へ移したの和である。したがって
となる。
例 3.5. 以下の数字列はすべて2進表示とする。
をで割る。を引くとが残り、そこからを引くとが残り、さらにを引くとが残る。引いた数はそれぞれ、、なので、商は、余りはである。
であるから、商と余りは除法の条件を満たす。
4 桁数と数の大きさ
系 4.1.を以上の整数、を正整数とする。の進表示がちょうど桁であるための必要十分条件は
である。
証明.の進表示の桁数をとする。先頭の数字は以上であり、すべての数字は以下であるから、
が成り立つ。和の等式はをについて足すことで得られる。したがってならば、求める不等式が成り立つ。逆にを仮定する。ならばとなり、ならばとなる。どちらも仮定に反するので、である。▨
例 4.2.なので、系 4.1により、の2進表示は桁である。
5 コンピュータと2進・16進、小数の表示
コンピュータでは、二つの状態を区別する2進法が広く用いられます。 2進表示を人が読む場合には、4桁ずつまとめて1桁にする16進法が用いられます。 16進法では、〜に加えて〜を使います。 4桁の2進表示が表す数は以上以下なので、16進法の一桁に対応します。色コードやメモリアドレスにも16進法が使われます。
注意 5.1. 小数の位には、底の負の指数のべきを用いる。10進法のは、2進法では
と循環する。小数点以下桁までの有限2進表示なら、を掛けると整数になる。しかしはどの非負整数に対しても整数でないので、は有限2進表示をもたない。 10進法でが循環するのと同じく、底を変えると、有限桁で表すことができない分数も変わる。
を有限の2進表示で保存する場合には近似値を使います。浮動小数点では、数を限られた桁数で保存するため、入力値の近似や演算時の丸めによる誤差が生じます。の加算結果を調べる場合にも、保存される近似値と丸めの方式を区別する必要があります。
閑話休題:底と表示の費用 底における正整数の桁数をとし、記号の種類と桁数の積を費用とします。桁数をで近似すると、費用はとなります。この連続近似では、費用は底で最小となり、整数の底の中ではで最小となります。一方、実際の桁数は整数であるため、特定のについて底で費用が最小になるとは限りません。実際、では、底の費用は、底の費用はです。記号の種類と桁数の積は radix economy と呼ばれる指標であり、計算機の素子の製造費用や演算時間を直接表すものではありません。
1958年、モスクワ大学で開発されたコンピュータ「セトゥン」(Setun)は、の三つの数字を使うバランス3進法で動く実機でした。セトゥンは少数が製造されました。教育機関などで使われた記録も残っています。一方、計算機では2進法が広く使われるようになりました。二つの状態を区別する素子と三つ以上の状態を区別する素子の間で、安定性や製造の条件が異なるため、表示の費用だけで計算機に用いる底が決まるわけではありません。
6 例題
レベル1 — n 進法
次の問いに答えよ。添字の (n) はその数が n 進法で書かれていることを表す(16進法では 10〜15 を A〜F で書く)。
解法の型10進進は「n で割って余りを下の桁から並べる」、n進進は「各桁に n のべきを掛けて足す」
例 6.1. 448 を 8 進法で表したとき、末尾に並ぶ 0 の個数を求めよ。
答
注意 8 進法で末尾に 0 が k 個以上並ぶその数が 8^k で割り切れる(最下位から k 桁が 08^k の倍数)。したがって「ちょうど k 個」は「8^k で割り切れて 8^(k+1) では割り切れない」ことと同値。4487×8² で 7 は 8 で割り切れないから、448 を割り切る 8 のべきの最大は 8²、すなわち答えは 2。実際 448 を 8 進法で書くと 700 で、末尾に 0 が 2 個並ぶ。
例 6.2. 5 進法で 2240 と表される数を10進法で表せ。
答
注意 各桁に 5 のべきを掛けて足す: 2×5³ + 2×5² + 4×5¹ +250 + 50 + 20 + 0320。検算は逆向きの変換(320 を 5 で割り続ける)で行うとよい。
例 6.3. 3458 を 8 進法で表せ。
答
注意 8 で割った余りを下の桁から並べる: 3458 ÷ 8432 余り 2、432 ÷ 854 余り 0、54 ÷ 86 余り 6、6 ÷ 80 余り 6。商が 0 になったら終了で、余りを逆順(下の桁から上の桁へ)に読むと 6602。
例 6.4. 21 を 2 進法で表せ。
答
注意 2 で割った余りを下の桁から並べる: 21 ÷ 210 余り 1、10 ÷ 25 余り 0、5 ÷ 22 余り 1、2 ÷ 21 余り 0、1 ÷ 20 余り 1。商が 0 になったら終了で、余りを逆順(下の桁から上の桁へ)に読むと 10101。
例 6.5. 160 を 2 進法で表したとき、末尾に並ぶ 0 の個数を求めよ。
答
注意 2 進法で末尾に 0 が k 個以上並ぶその数が 2^k で割り切れる(最下位から k 桁が 02^k の倍数)。したがって「ちょうど k 個」は「2^k で割り切れて 2^(k+1) では割り切れない」ことと同値。160で 5 は 2 で割り切れないから、160 を割り切る 2 のべきの最大は、すなわち答えは 5。実際 160 を 2 進法で書くと 10100000 で、末尾に 0 が 5 個並ぶ。
例 6.6. 8 進法で表された 246 と 13 の和を、8 進法のまま表せ。
答
注意 いったん10進に直すと 246 (8進)166、13 (8進)11 で和は 177。これを 8 進法に戻すと 261。桁ごとに足して 8 以上になったら上の桁へ 1 繰り上げる、と直接計算しても同じ答えになる。
例 6.7. 16 進法で 641 と表される数を10進法で表せ。
答
注意 各桁に 16 のべきを掛けて足す: 6×16² + 4×16¹ +1536 + 64 + 11601。検算は逆向きの変換(1601 を 16 で割り続ける)で行うとよい。
例 6.8. 2 進法で表された 111110 と 100 の和を、2 進法のまま表せ。
答
注意 いったん10進に直すと 111110 (2進)62、100 (2進)4 で和は 66。これを 2 進法に戻すと 1000010。桁ごとに足して 2 以上になったら上の桁へ 1 繰り上げる、と直接計算しても同じ答えになる。
例 6.9. 280 を 8 進法で表せ。
答
注意 8 で割った余りを下の桁から並べる: 280 ÷ 835 余り 0、35 ÷ 84 余り 3、4 ÷ 80 余り 4。商が 0 になったら終了で、余りを逆順(下の桁から上の桁へ)に読むと 430。
例 6.10. 5120 を 8 進法で表したとき、末尾に並ぶ 0 の個数を求めよ。
答
注意 8 進法で末尾に 0 が k 個以上並ぶその数が 8^k で割り切れる(最下位から k 桁が 08^k の倍数)。したがって「ちょうど k 個」は「8^k で割り切れて 8^(k+1) では割り切れない」ことと同値。512010×8³ で 10 は 8 で割り切れないから、5120 を割り切る 8 のべきの最大は 8³、すなわち答えは 3。実際 5120 を 8 進法で書くと 12000 で、末尾に 0 が 3 個並ぶ。
7 演習
レベル1 — n 進法
次の問いに答えよ。添字の (n) はその数が n 進法で書かれていることを表す(16進法では 10〜15 を A〜F で書く)。
解法の型10進進は「n で割って余りを下の桁から並べる」、n進進は「各桁に n のべきを掛けて足す」
問題 7.1. 2 進法で 110010 と表される数を10進法で表せ。
解答.
答
注意 各桁に 2 のべきを掛けて足す:++ 0×2³ + 0×2² + 1×2¹ +32 + 16 + 0 + 0 + 2 + 050。検算は逆向きの変換(50 を 2 で割り続ける)で行うとよい。▨
問題 7.2. 875 を 5 進法で表したとき、末尾に並ぶ 0 の個数を求めよ。
解答.
答
注意 5 進法で末尾に 0 が k 個以上並ぶその数が 5^k で割り切れる(最下位から k 桁が 05^k の倍数)。したがって「ちょうど k 個」は「5^k で割り切れて 5^(k+1) では割り切れない」ことと同値。8757×5³ で 7 は 5 で割り切れないから、875 を割り切る 5 のべきの最大は 5³、すなわち答えは 3。実際 875 を 5 進法で書くと 12000 で、末尾に 0 が 3 個並ぶ。▨
問題 7.3. 8 進法で表された 603 と 205 の和を、8 進法のまま表せ。
解答.
答
注意 いったん10進に直すと 603 (8進)387、205 (8進)133 で和は 520。これを 8 進法に戻すと 1010。桁ごとに足して 8 以上になったら上の桁へ 1 繰り上げる、と直接計算しても同じ答えになる。▨
問題 7.4. 5 進法で 432 と表される数を10進法で表せ。
解答.
答
注意 各桁に 5 のべきを掛けて足す: 4×5² + 3×5¹ +100 + 15 + 2117。検算は逆向きの変換(117 を 5 で割り続ける)で行うとよい。▨
問題 7.5. 33 を 2 進法で表せ。
解答.
答
注意 2 で割った余りを下の桁から並べる: 33 ÷ 216 余り 1、16 ÷ 28 余り 0、8 ÷ 24 余り 0、4 ÷ 22 余り 0、2 ÷ 21 余り 0、1 ÷ 20 余り 1。商が 0 になったら終了で、余りを逆順(下の桁から上の桁へ)に読むと 100001。▨
問題 7.6. 80 を 5 進法で表せ。
解答.
答
注意 5 で割った余りを下の桁から並べる: 80 ÷ 516 余り 0、16 ÷ 53 余り 1、3 ÷ 50 余り 3。商が 0 になったら終了で、余りを逆順(下の桁から上の桁へ)に読むと 310。▨
問題 7.7. 3537 を 8 進法で表せ。
解答.
答
注意 8 で割った余りを下の桁から並べる: 3537 ÷ 8442 余り 1、442 ÷ 855 余り 2、55 ÷ 86 余り 7、6 ÷ 80 余り 6。商が 0 になったら終了で、余りを逆順(下の桁から上の桁へ)に読むと 6721。▨
問題 7.8. 1145 を 8 進法で表せ。
解答.
答
注意 8 で割った余りを下の桁から並べる: 1145 ÷ 8143 余り 1、143 ÷ 817 余り 7、17 ÷ 82 余り 1、2 ÷ 80 余り 2。商が 0 になったら終了で、余りを逆順(下の桁から上の桁へ)に読むと 2171。▨
問題 7.9. 5 進法で表された 311 と 231 の和を、5 進法のまま表せ。
解答.
答
注意 いったん10進に直すと 311 (5進)81、231 (5進)66 で和は 147。これを 5 進法に戻すと 1042。桁ごとに足して 5 以上になったら上の桁へ 1 繰り上げる、と直接計算しても同じ答えになる。▨
問題 7.10. 16 進法で表された 5A と 98 の和を、16 進法のまま表せ。
解答.
答
注意 いったん10進に直すと 5A (16進)90、98 (16進)152 で和は 242。これを 16 進法に戻すと F2。桁ごとに足して 16 以上になったら上の桁へ 1 繰り上げる、と直接計算しても同じ答えになる。▨
問題 7.11. 8 進法で 5242 と表される数を10進法で表せ。
解答.
答
注意 各桁に 8 のべきを掛けて足す: 5×8³ + 2×8² + 4×8¹ +2560 + 128 + 32 + 22722。検算は逆向きの変換(2722 を 8 で割り続ける)で行うとよい。▨
問題 7.12. 3066 を 16 進法で表せ。
解答.
答
注意 16 で割った余りを下の桁から並べる: 3066 ÷ 16191 余り 10(A)、191 ÷ 1611 余り 15(F)、11 ÷ 160 余り 11(B)。商が 0 になったら終了で、余りを逆順(下の桁から上の桁へ)に読むと BFA。16進法では 10〜15 を A〜F で表す。▨
問題 7.13. 96 を 16 進法で表したとき、末尾に並ぶ 0 の個数を求めよ。
解答.
答
注意 16 進法で末尾に 0 が k 個以上並ぶその数が 16^k で割り切れる(最下位から k 桁が 016^k の倍数)。したがって「ちょうど k 個」は「16^k で割り切れて 16^(k+1) では割り切れない」ことと同値。966×16 で 6 は 16 で割り切れないから、96 を割り切る 16 のべきの最大は 16、すなわち答えは 1。実際 96 を 16 進法で書くと 60 で、末尾に 0 が 1 個並ぶ。▨
問題 7.14. 192 を 2 進法で表したとき、末尾に並ぶ 0 の個数を求めよ。
解答.
答
注意 2 進法で末尾に 0 が k 個以上並ぶその数が 2^k で割り切れる(最下位から k 桁が 02^k の倍数)。したがって「ちょうど k 個」は「2^k で割り切れて 2^(k+1) では割り切れない」ことと同値。192で 3 は 2 で割り切れないから、192 を割り切る 2 のべきの最大は、すなわち答えは 6。実際 192 を 2 進法で書くと 11000000 で、末尾に 0 が 6 個並ぶ。▨
問題 7.15. 5 進法で表された 200 と 203 の和を、5 進法のまま表せ。
解答.
答
注意 いったん10進に直すと 200 (5進)50、203 (5進)53 で和は 103。これを 5 進法に戻すと 403。桁ごとに足して 5 以上になったら上の桁へ 1 繰り上げる、と直接計算しても同じ答えになる。▨