基数変換と負の数の表現(基礎理論)
学習のポイント
コンピュータ内部では、ビットの「オン」「オフ」でデータは管理されています。つまり「1」と「0」の2進数ということになります。ここでは、10進数・2進数・8進数・16進数の相互の基数変換をマスターし、補数を使用した「負の数」の表現についてマスターします。
1. 基数とは? | |||||||||||||||||||
基数とは、数値の各桁の位取りの基準となる数のことで、私たちが、普段の使用している「10進数」は、「10倍」ごとに桁が上がっていくので、「基数は10」となります。 各桁の重みは、基数「10」を使用して以下のようになります。
・1桁目…100 = 1 例えば、6253の10進数は、(6253)10と表現します。
(6253)10 = 6×103 + 2×102 + 5×101 + 3×100 |
|||||||||||||||||||
2. n進数から10進数への変換 | |||||||||||||||||||
n進数から10進数の変換 (1011)2 = 1×23+0×22+1×21+1×20 = 8+0+2+1 = (11)10 ※0乗は「1」となります。 ●8進数から10進数への変換 (365)8 = 3×82+6×81+5×80 = 192 + 48 + 5 = (245)10 ●16進数から10進数への変換 (365)16 = 3×162+6×161+5×160 = 768 + 96 + 5 = (869)10 ●小数の場合 (0.101)2 = 1×2-1+0×2-2+1×2-3 = 0.5+0+0.125 = (0.625)10 (0.AF)16 = A×16-1+F×16-2 = 10×0.0625+15×0.00390625 = (0.683559375)10 ※整数と小数の場合はそれぞれ分けて変換します。 |
|||||||||||||||||||
3. 10進数からn進数への変換 | |||||||||||||||||||
これは、対象の10進数をnで割り算を行い、この商がnより小さくなるまで繰り返して、余りを右に倒します。下記の例は、10進数39を2進数へ変換した過程です。
●小数の場合 小数の場合は、対象の10進数をnで乗じてして整数部を順次取り出します。この処理を小数部が「0」になるまで繰り返します。 (0.375)10を2進数へ変換する場合 0.375×2=0.75 0.75×2=1.5 0.5×2=1.0 よって、上記の太字の部分を上から並べて、(0.011)2となります。 (0.8046875)10の16進数へ変換する場合 0.8046875×16=12.875 0.875×16=14.000 よって、(0.CE)16 ※小数の場合は、必ず変換出来るとは限りません。この場合は、無限小数となります。例えば、10進数で有限小数を2進数へ変換した場合、必ず有限桁で表現出来るとは限りません。 |
|||||||||||||||||||
4. 2進数から16進数・8進数への変換 | |||||||||||||||||||
●2進数から16進数への変換 2進数を4桁ずつ区切り、それぞれを10進数へ変換する (1101110)2は110と1110の4桁にします。110は0110と同じです。 「0110」を10進数へ変換すると「6」 「1110」を10進数へ変換すると「14」、14は16進数で「E」となり (1101110)2 = (6E)16 ●2進数から8進数への変換 2進数を3桁ずつ区切り、それぞれを10進数へ変換する (1101110)2は1と101と110の3桁にします。1は001と同じです。 「001」を10進数へ変換すると「1」 「101」を10進数へ変換すると「5」 「110」を10進数へ変換すると「6」となり、 (1101110)2 = (156)8 |
|||||||||||||||||||
5. 基数変換の桁数 | |||||||||||||||||||
まず、前提知識として指数と対数について学習します。 AX = B これを対数を使用すると、logAB = X ここで、logAB のAのことを「底」と言います。 例えば、 24 = 16 は、対数(log)を使用すると、log216 = 4 となります。 対数には、5個の公式があります。これは覚えて置きましょう。
一般にx進数のn桁の最大値は、xn-1となります。 2進数3桁の場合は、23-1 8進数3桁の場合は、83-1 16進数3桁の場合は、163-1 10進数3桁の場合は、103-1 ここで、10進数の10桁は2進数では何桁(x)になるか求めて見ましょう。 1010-1 = 2x-1 1010 = 2x Log101010=Log102x Log101010 = 10×Log1010 = 10×1=10 Log102x = x×Log102 よって、10 = x×Log102 ここで、Log102は約0.301です。 よって、x = 10 ÷ 0.301 = 約33.2 ここでxは整数のため、34桁が解答となります。 14けたの16進数の最大値は、10進数であらわすと何けたか。ここで、log102=0.301とする。 回答群は・・・・ア 15 イ 16 ウ 17 エ 18 (解説) 10進数の桁数をXとすると、 1614 - 1 = 10x -1 1614 = 10x ここで両辺の対数をとると、 log101614 = log1010x となります。 左辺は log101614 = 14×log1016 = 14×log1024 = 14×(0.301)×4 = 14×1.204 = 16.856 右辺は log1010x = x × log1010 = x × 1 = x よって、 x = 16.856 で16を超えているため、解答は、17のウとなります。 |
|||||||||||||||||||
6. 負の数の表現(補数) | |||||||||||||||||||
コンピュータの内部での「負の数の表現」では「補数」を使用します。「補数」とは、「ある基準となる値からいくつ不足しているか」を表現したものです。補数には、2種類あり、「n進数」の補数の場合、「nの補数」と「n-1の補数」があります。 例えば、10進数の場合は、「10の補数」と(10-1)=「9の補数」があります n進数のm桁の数字の場合 ●「nの補数」の求め方 「m桁の最大値より1大きい数-もとのm桁の数字」から引き算を行います。 ●「n-1の補数」の求め方 「m桁の最大値-もとのm桁の数字」から引き算を行います。 以下、例を示します。 ●10進数の場合(.365の補数を求める) ・10の補数 1000 - 365 = 635 ・9の補数 999 - 365 = 634 ●2進数の場合(01011011の補数を求める) ・2の補数(n桁の最大値より1大きい数-もとの2進数) 100000000 - 01011011 = 10100101 ・1の補数(n桁の最大値-もとの2進数) 11111111 - 01011011 = 10100100 ※(テクニック) 2進数で1の補数を求める場合は、元の2進数のビットを反転させて求められます。従って簡単に求めるには、前述のようにしてビットを反転させて、1の補数を求め、+1すれば2の補数となります。 2の補数の絶対値を求めるには、以下のようにします。 ・ビットの0と1を反転する ・上記に1を加算する これで、絶対値となります。 ●16進数の場合(ADFの補数を求める) 16の補数 1000 - ADF = 521 15の補数 FFF - ADF = 520 「補数」を使用する理由は以下の点にあります。 ●減算を加算回路で行うことができるため。 |