n進数

にメンテナンス済み
最初に問題に挑戦してみましょう!

aを正の整数とし、b=a2b=a^2とする。aを2進数で表現するとnビットであるとき、bを2進数で表現すると最大で何ビットになるか。

解説
a のビット数a の最大値bb の 2 進数表現b のビット数
11111
23910014
37491100016
415225111000018
531961111100000110
663396911111000000112
n2n12^n-1a2a^2b=(2n1)2b=(2^n-1)^22n
  1. n ビットで表すことのできる最大値は、2n12^n-1と表現することができます。
  2. b=a2b=a^2であるから、b=(2n1)2b=(2^n-1)^2となります。
  3. bbを展開すると、b=22n2n+1+1b=2^{2n}-2^{n+1}+1となります。
  4. 問題文に、a は正の整数であるという条件があるため、3 で求めた式のうち、2n+1+1-2^{n+1}+1は最大でも-3 となります。
  5. 重みによっては 1 桁で-3 を越えることがあるため、bb22n2^{2n}の部分が最大の桁になります。
  6. 22n2^{2n}を 2 進数で表現すると、2n2nビットになります。
  7. よって、b を 2 進数で表現すると最大で2n2nビットになります。

私たちが普段モノや単位を扱うときには、10 進数を使っています。

0~9 までの 10 個の数字を使い、10 を超える場合は桁数を増やして表現することで、数を表現しています。

それに対しコンピュータでは、2 進数を使って計算を行います。

10 進数では 0 から 9 までの 10 個の数字を使って数を表現しますが、2 進数では 0 と 1 の 2 個の数字を使って数を表現します。

このように、数を表現するために使う数字の個数を基数といい、n 進数という表現を使います。

この項では、n 進数の基本的な考え方と計算方法について解説します。

2 進数の基本的な考え方

まず、2 進数で数を表現した場合、10 進数との対応を見てみましょう。

10 進数2 進数
00
11
210
311
4100
5101
6110
7111
81000
91001
101010

2 進数では、1 桁で表現できる数が 0 と 1 の 2 つだけです。

そのため、3 以上の数を表現するためには、桁数を増やして表現する必要があります。

例えば、10 進数の 10 は、2 進数では 1010 と表現されます。

基数の桁と重み

10 進数では、各桁の数に 10 の冪乗をかけて足し合わせることで数を表現しています。

例えば、123 という数は、(100×1)+(10×2)+(1×3)(100 × 1) + (10 × 2) + (1 × 3)という計算で表現されます。

これを分解すると、(102×1)+(101×2)+(100×3)(10^2 × 1) + (10^1 × 2) + (10^0 × 3)という計算になります。

私たちは日常的に 10 進数を使っているため、このような計算を意識せずに行っていますが、2 進数でも同様の計算を行う必要があります。

つまり、2 進数で 1010 という数は、23×1+22×0+21×1+20×02^3 × 1 + 2^2 × 0 + 2^1 × 1 + 2^0 × 0という計算で表現されます。

これを計算すると、8+0+2+0=108 + 0 + 2 + 0 = 10となり、10 進数の 10 と同じ数を表現していることがわかります。

このように、増えるにつれて基数の冪乗が増えていくことを、各桁の重みと呼びます

小数点以下の数

小数点以下の数を表現する場合も同様に、各桁の数に基数の冪乗をかけて足し合わせることで数を表現します。

例えば、10 進数の 0.125 は、2 進数では 0.001 と表現されます。

この場合、21×0+22×0+23×12^{-1} × 0 + 2^{-2} × 0 + 2^{-3} × 1という計算で表現されます。

これを計算すると、0+0+0.125=0.1250 + 0 + 0.125 = 0.125となり、10 進数の 0.125 と同じ数を表現していることがわかります。

ビットとバイト

前述の通り、コンピュータでは 2 進数を使って計算を行います。

そのため、2 進数で表現される数を扱う際には、ビットという単位を使います。

例えば、10 進数の1010を 2 進数で表現すると10101010となりますが、10101010のように 4 桁で表現する場合、44ビットの数ということになります。

また、私たちが普段コンピュータでデータを取り扱う単位としては、バイトの方が馴染みがあるかもしれません。

このバイトは、8 ビットの数を 1 つの単位として扱うもので、1 バイトは 8 ビットの数を表すことができます。

つまり、ビットでは 1 桁で 0 と 1 の 2 つの数を表現できるのに対し、バイトでは28=2562^8=256通りの数を表現することができます。

8 進数と 16 進数

2 進数の他にも、8 進数や 16 進数などの n 進数があります。

8 進数は 0 から 7 までの 8 個の数字を使って数を表現し、16 進数は 0 から 9 までの 10 個の数字と A から F までの 6 個のアルファベットを使って数を表現します。

1 桁で表現できる数を増やすことで、数を表現する際の桁数を減らすことができます。

あまり使うことはありませんが、0 から 9、A-Z までの文字を使えば、36 進数まで表現できます。

n 進数の変換

ここまでの説明の中で、10 進数から 2 進数への変換を見てきました。

同様に、2 進数から 8 進数や 16 進数への変換も行うことができます。

n 進数で 1 桁で表現することのできる数と重みの関係を理解しておけば、n 進数同士の変換も行うことができます。

例えば、2 進数の10101010を 8 進数に変換する場合を考えてみましょう。まずは分かりやすいように、一度 10 進数に変換してみます。

1010=23×1+22×0+21×1+20×0=8+0+2+0=101010 = 2^3 × 1 + 2^2 × 0 + 2^1 × 1 + 2^0 × 0 = 8 + 0 + 2 + 0 = 10

このように、2 進数の10101010は 10 進数の1010と同じ数を表現しています。では、これを 8 進数に変換するとどうなるでしょうか。

10=1×81+2×80=1210 = 1 × 8^1 + 2 × 8^0 = 12

このように、10 進数の1010は 8 進数の1212と同じ数を表現しています。

また、8 は 2 の 3 乗であるため、2 進数の 3 桁で表現することができます。

1010=001010=001/0101010 = 001010 = 001/010と 3 桁に区切ることで、001=1001=1010=2010=2となり、直接 8 進数に変換することもできます。

練習問題

最後に、練習問題を解いてみましょう。

次の数を 2 進数で表現してください。

10進数123123を、英字A~Zを用いた26進数で表したものはどれか。ここで、A=0A=0B=1B=1Z=25Z=25とする。

解説

10 進数123123を 26 進数の各桁に変換すると、123=4×261+19×260123=4×26^1+19×26^0となります。

それぞれ対応するアルファベットは、4=E4=E19=T19=Tであるため、答えはETETとなります。

#数学 #n進数