HOME > 技術談話 > 基数復習

はじめに 10進数 2進数 8進数 16進数


■はじめに

 知っているだけに、あえて基数の説明を書こうとすると精神的に非常に苦しいです。
 「こういうものだ!」としか言いようがないのですが、たまに悩む人がいるようなので本章を設けます


■10進数

 一般的な解説ですが、10進数は0〜9の数字を組み合わせて表現される数値です。
 1桁で10に相当する値を表現する数字(文字)はありません。 9 が最大の数字になります。

 最大値の9 の次は1と0で組み合わさた2桁の10になります。

 これでは当たり前すぎるので、少し説明を加えます。

 一の位の数字で示される0〜9。十の位の数字で示される0〜9。
 双方の数字が同じであったとしても位の位置により数字の「重み」が変わります。
 普段から馴染みのある10進数ですが、各位の「重み」を簡単にまとめると以下の様になります。

千の位 百の位 十の位 一の位
1000倍 100倍 10倍 1倍

 例えば 1234 という数字であれば、
  
1234 = (1 * 1000) + (2 * 100) + (3 * 10) + (4 * 1)
となります。お金に例えれば、千円札が1枚、百円玉が2枚、十円玉が3枚、そして一円玉が4枚です。

 各位の「重み」について規則性があることがわかりますか?位が上がる度に10倍されていますよね。
 十の位が10で、百の位がその10倍の100。当たり前のことですが、これが重要です。
 では各位が10倍されていることをまとめてみましょう。

千の位 百の位 十の位 一の位
1000 = 100 * 10 100 = 10 * 10 10 = 1 * 10 1 = 1

 一の位だけ例外になりますが、その他の位は順番に10倍されています。
 では、これを一歩進めて「べき乗」表現してみます。

 「べき乗」は「累乗」と表現されることがありますが、1つの数字同士を掛け合わせる操作です。
 表現としては、10 * 10 であれば2回の掛け合わせで 102 と表現します。例外的に 1001 になります。

 それでは各位の「重み」を「べき乗」を使って表現してみます。

千の位 百の位 十の位 一の位
1000 = (10 * 10) * 10
= 103
100 = (10) * 10
= 102
10 = (1) * 10
= 101
1 = 1
= 100

 一の位から順番に「べき乗」の添字(掛け合わせる数)が+1されています。

 つまり、10進数では各位の「重み」は 10n で表現することができます。
 更に、10 が10進数であることを示し、n が位(桁の位置)を示しています。

 続いて小数点以下を見てみましょう。
 これまでの算数の経験上、小数点以下第1位は0.1、小数点以下第2位は0.01ですよね。

 この小数点以下の数字に対しても位に対する「重み」が重要です。

一の位 小数点以下第1位 小数点以下第2位 小数点以下第3位
1倍 0.1倍 0.01倍 0.001倍

 例えば 1.234 という数字であれば、
  1.234 = (1 * 1) + (2 * 0.1) + (3 * 0.01) + (4 * 0.001)
となります。

 各位の「重み」についてはこれまでと同様に規則性があります。各位を重ねるたびに10分の1されています。
 では、各位が10分の1されていることをまとめてみましょう。

一の位 小数点以下第1位 小数点以下第2位 小数点以下第3位
1 = 1 0.1 = 1 / 10 0.01 = 0.1 / 10 0.001 = 0.01 / 10

 さて、今度は各位を「べき乗」で表現してみます。
 表現としては、 1 / 10 であれば1回の割り算で 10-1 と表現されます。

一の位 小数点以下第1位 小数点以下第2位 小数点以下第3位
1 = 1
= 100
0.1 = 1 / 10
= 10-1
0.01 = 0.1 / 10
= 10-2
0.001 = 0.01 / 10
= 10-3

 一の位から順番に「べき乗」の添字(割る数)が−1されていますね。
 これにより小数点以上、小数点以下に関わらず10進数では各位の「重み」が 10n で表現することができました。

 以上が10進数の特徴です。この考え方は後述の2進数、8進数、16進数にも応用できる考え方です。


■2進数

 2進数は0、1の数字を組み合わせて表現される数値です。
 0、1に続いて、次は2では無く10になります。同様に10、11に続くのは100になります。
 以下に以下に2進数と、2進数の値に相当する10進数の値をまとめます。

2進数 10進数
0 0
1 1
10 2  2進数ではここで桁上がりが生じます。
11 3
100 4  2進数ではここで桁上がりが生じます。
101 5
110 6
111 7
1000 8  2進数ではここで桁上がりが生じます。
1001 9
1010 10
1011 11
1100 12
1101 13
1110 14
1111 15

 10進数と同様、2進数にも各位の「重み」があります。
 2進数では百や千と言った概念が無いので、ここでは桁(便宜上、0桁目から)で表記します。

3桁目 2桁目 1桁目 0桁目
8倍 4倍 2倍 1倍

 例えば、 1011 という2進数の数値であれば、
  
1011 = (1 * 8) + (0 * 4) + (1 * 2) + (1 * 1)
となります。結果としては、 8 + 2 + 1 = 11 この 11 は10進数ですが、2進数で表現すれば
1011 になります。
 
掛け率」を順番に並べれば2進数、「重み」を加算すれば10進数に相当する値になることに気が付きました?

 10進数と同様、「重み」の規則性についてまとめてみます。1つ前(右)の桁に対して2倍されています。

3桁目 2桁目 1桁目 0桁目
8 = 4 * 2 4 = 2 * 2 2 = 1 * 2 1 = 1

 今度は各位の「重み」を「べき乗」を使って表現してみます。

3桁目 2桁目 1桁目 0桁目
8 = (2 * 2) * 2
= 23
4 = (2) * 2
= 22
2 = (1) * 2
= 21
1 = 1
= 20

 一の位から順番に「べき乗」の添字(掛け合わせる数)が+1されています。
 10進数の考え方と同様、2進数では各位の「重み」は 2n で表現することができます。
 更に、2 が2進数であることを示し n が位(桁の位置)を示しています。

 なお、この考え方は2進数から10進数への変換、10進数から2進数の変換の時に必要な概念です。

 コンピュータの内部では電気のオンとオフの2通り、2進数の世界ですから。10進数は人間用と思ってください。

 続いて小数点以下を見てみましょう。
 2進数における小数点以下の表現は余り見かけませんが、試験で出題されることがあります。

0桁目 小数点以下第一位 小数点以下第二位 小数点以下第三位
1倍 0.5倍 0.25倍 0.125倍

 例えば 1.010 という2進数の数値であれば、
  
1.010 = (1 * 1) + (0 * 0.5) + (1 * 0.25) + (0 * 0.125)
となります。計算上は、1 + 0.25 = 1.25 この 1.25 は10進数ですが、2進数で表現すれば
1.010 になります。

 各位の「重み」についてはこれまでと同様に規則性があります。各位を重ねるたびに2分の1されています。
 では、各位が2分の1されていることをまとめてみましょう。

0桁目 小数点以下第1位 小数点以下第2位 小数点以下第3位
1 = 1 0.5 = 1 / 2 025 = 0.5 / 2 0.125 = 025 / 2

 さて、今度は各位を「べき乗」で表現してみます。
 表現としては、 1 / 2 であれば1回の割り算で 2-1 と表現されます。

0桁目 小数点以下第1位 小数点以下第2位 小数点以下第3位
1 = 1
= 20
0.5 = 1 / 2
= 2-1
025 = ((1 / 2) / 2
= 2-2
0.125 = (((1 / 2) / 2) / 2
= 2-3

 一の位から順番に「べき乗」の添字(割る数)が−1されていますね。
 これにより小数点以上、小数点以下に関わらず2進数では各位の「重み」が 2n で表現することができました。

 以上が2進数の特徴です。

 「べき乗」の説明を先にした方がわかりやすいかもしれませんが、本章では、結果から「べき乗」を導いています。
 上から下へ説明を読んだ後、下から上に向かって説明を読むと理解しやすいかもしれませんね。


■8進数

 ほとんど使う機会がなく、今では試験対策用の8進数ですが…。

 8進数は0〜7の数字を組み合わせて表現される数値です。
 0、1…6、7に続いて、次は8ではなく10になります。同様に16、17に続くのは100になります。
 以下に8進数と、8進数の値に対応する2進数と10進数の値をまとめます。

8進数 2進数 10進数
0 0 0
1 1 1
2 10 2
3 11 3
4 100 4
5 101 5
6 110 6
7 111 7
10 1000 8  8進数ではここで桁上がりが生じます。
11 1001 9
12 1010 10
13 1011 11
14 1100 12
15 1101 13
16 1110 14
17 1111 15

 10進数と同様、8進数にも各位の「重み」があります。
 8進数では百や千と言った概念が無いので、ここでは桁(便宜上、0桁目から)で表記します。

3桁目 2桁目 1桁目 0桁目
512倍 64倍 8倍 1倍

 例えば、 1011 という8進数の数値であれば、
  
1011 = (1 * 512) + (0 * 64) + (1 * 8) + (1 * 1)
となります。結果としては、 512 + 8 + 1 = 521 この 521 は10進数ですが、8進数で表現すれば
1011 になります。
 
掛け率」を順番に並べれば8進数、「重み」を加算すれば10進数に相当する値になります。

 10進数と同様、「重み」規則性についてまとめてみます。1つ前(右)の桁に対して2倍されています。

3桁目 2桁目 1桁目 0桁目
512 = 64 * 8 64 = 8 * 8 8 = 1 * 8 1 = 1

 今度は各位の「重み」を「べき乗」を使って表現してみます。

3桁目 2桁目 1桁目 0桁目
512 = (8 * 8) * 8
= 83
64 = (8) * 8
= 82
8 = (1) * 8
= 81
1 = 1
= 80

 一の位から順番に「べき乗」の添字(掛け合わせる数)が+1されています。
 10進数の考え方と同様、8進数では各位の「重み」は 8n で表現することができます。
 更に、8 が8進数であることを示し n が位(桁の位置)を示しています。

 なお、この考え方は8進数から10進数への変換、10進数から8進数の変換の時に必要な概念です。

 以上が8進数の特徴です。

 …。

 小数点以下の記述が抜けてますね…。試験以外では利用する機会はありませんので割愛します。
 決して、桁が増えて記述が面倒…。ってことではありません ^ ^ ;
 仮に利用する機会がある場合は、前述の2進数における小数点以下の考え方を各自で応用してみてください。



 余談ですが、C言語で8進数の数値を表現する場合は数値の前に「0(ゼロ)」を付与します。
 056 であれば8進数の 56(10進数では 46 相当) 、単に 56 であれば10進数の 56 になります。

 C言語のコーディングでdefineというのがあり、これを利用して数値の宣言を記述している際に失敗をしたことがあります。

 <最初の記述>
  #define  xxx_19   19
  #define  xxx_320  320


 数値の記述で桁がズレるので、見栄えを良くする為に、ささやかな変更を加えました。本人は自己満足です。

 <失敗した記述>

  #define  xxx_019  019
  #define  xxx_320  320


 この余計なことをコンパイラは見逃しません。しっかりエラーで返します。

 何が間違っているか、冷静に見ればすぐにわかりますよね。
 ですが、忙しい時には原因がわかるまで思考が右往左往します。時には不具合を見逃す可能性があります。

 以後は同じ誤りをしていませんが、値によってはエラーにならない場合があるので注意が必要です。


■16進数

 2進数と同様、確実に押さえておかなければならない基数です。
 普段は電卓を使用して基数変換を行う事が多いと思いますが、基数変換の規則はしっかり理解しておきましょう。

 16進数は0〜9の数字、A〜Fの英字、全16種類の英数字を組み合わせて表現される数値です。
 0、1…8、9に続いて、次はAとなり、D、E、Fと続いて、その次は10になります。
 以下に16進数と16進数の値に対応する2進数と10進数の値をまとめます。

16進数 2進数 10進数
0 0 0
1 1 1
2 10 2
3 11 3
4 100 4
5 101 5
6 110 6
7 111 7
8 1000 8
9 1001 9
A 1010 10 16進数では英字を利用します
B 1011 11
C 1100 12
D 1101 13
E 1110 14
F 1111 15
10 10000 16 16進数はここで桁上がりが生じます
11 10001 17
12 10010 18

 他の基数と同様、16進数にも各位の「重み」があります。
 16進数では百や千と言った概念が無いので、ここでは桁(便宜上、0桁目から)で表記します。

3桁目 2桁目 1桁目 0桁目
4096倍 256倍 16倍 1倍

 例えば、 1011 という16進数の数値であれば、
  
1011 = (1 * 4096) + (0 * 256) + (1 * 16) + (1 * 1)
となります。結果としては、4096+16+1=4113この4113は10進数ですが、16進数で表現すれば
1011になります。
 
掛け率」を順番に並べれば16進数、「重み」を加算すれば10進数に相当する値になります。

 10進数と同様、「重み」規則性についてまとめてみます。1つ前(右)の桁に対して2倍されています。

3桁目 2桁目 1桁目 0桁目
4096 = 256 * 16 256 = 16 * 16 16 = 1 * 16 1 = 1

 今度は各位の「重み」を「べき乗」を使って表現してみます。

3桁目 2桁目 1桁目 0桁目
4096 = (16*16)*16
= 163
256 = (16)*16
= 162
16 = (1)*16
= 161
1 = 1
= 160

 一の位から順番に「べき乗」の添字(掛け合わせる数)が+1されています。
 10進数の考え方と同様、16進数では各位の「重み」は 16n で表現することができます。
 更に、16 が16進数であることを示し n が位(桁の位置)を示しています。

 なお、この考え方は16進数から10進数への変換、10進数から16進数の変換の時に必要な概念です。

 以上が16進数の特徴です。


Copyright 2007-2009 PaletteSoft LLC. All rights reserved. 利用条件 | HOME | サイトマップ | お問合せ