PR

【完全初心者向け】基礎理論の2進数・ビット演算・浮動小数点などをわかりやすく解説

基本情報技術者資格

こんにちは、たけです。今回は、基本情報技術者試験の「基礎理論」パートに登場する内容を初学者でも一発で理解できるように丁寧にまとめました。特に計算や意味がややこしい部分を中心に、数式や例を用いて解説します!

ちなみに私が勉強に使用している教材はこちらです。
図や例が豊富で、初心者にも本当にわかりやすかったです!

10進数・2進数・8進数・16進数とは?

簡単に言うと「何進数」とは、その数で1桁が何通りあるかという意味です。

  • 10進数 → 普段私たちが使っている数。0〜9の10種類。
  • 2進数 → コンピュータが使う。0と1だけ。
  • 8進数 → 0〜7の8種類。昔のOSなどで使われる。
  • 16進数 → 0〜9とA〜F(A=10, F=15)。色やアドレス表記などに使われる。

たとえば、10進数の “237” は:

  • 2進数表記:11101101
  • 16進数表記:ED

これらの変換を理解することで、2進数や16進数表記が怖くなくなりますし、プログラミングやネットワーク系の知識にもつながっていきます。

“重み”って何?

“重み”とは、数字の中で桁がどのくらいの重要度(価値)を持っているかを表す考え方です。

私たちが普段使っている10進数(例:237)でも、2という数字は「200」を、3は「30」を、7は「7」を意味します。これは、各桁が「10の何乗」かという重みを持っているからです。

実際に書くとこうなります: 237 = 2×10^2 + 3×10^1 + 7×10^0

この「10のべき乗」が各桁の“重み”です。

同じように、2進数「1011」の場合も桁ごとの重みがあります。

左から順に: 1×2^3 + 0×2^2 + 1×2^1 + 1×2^0 = 8 + 0 + 2 + 1 = 11(10進数)

つまり、

  • 一番左の1は「2^3 = 8」の重み
  • 次の0は「2^2 = 4」の重み
  • 次の1は「2^1 = 2」の重み
  • 最後の1は「2^0 = 1」の重み

これらをすべて足したら「11」になります。

どんな進数でもこの「桁ごとの重み」があり、これを正しく理解することで、どんな数値も別の進数に変換することができるようになります。

イメージとしては「桁の位置が意味するもの(単位)が違う」と考えるとわかりやすいですよ!

2進数から10進数への変換

2進数を10進数に変換するには、「重み」の知識を使います。つまり、2進数の各桁が持つ2のべき乗の重みを掛けて合計を出すという計算です。ここでは、整数と小数に分けて具体的に見ていきましょう。

整数編

2進数の整数部は、左から順にそれぞれ2のべき乗をかけていきます。

たとえば「1101」という2進数を10進数に変換するには、次のように計算します:

1101 = 1×2^3 + 1×2^2 + 0×2^1 + 1×2^0
= 8 + 4 + 0 + 1
= 13(10進数)

このように、上位の桁ほど重みが大きくなっていくことを使って、10進数に変換できるんです。

小数編

2進数の小数部(”.”より右側)は、2のマイナスのべき乗(2^-1, 2^-2, …)を使って重みを計算します。

たとえば「10.101」という2進数の小数を10進数に変換すると:

  • 整数部分:1×2^1 + 0×2^0 = 2
  • 小数部分:1×2^-1 + 0×2^-2 + 1×2^-3 = 0.5 + 0 + 0.125 = 0.625

合計:2.625(10進数)

小数点以下も、桁ごとに意味のある「重み」があるというのがポイントです。

10進数から2進数への変換

10進数の数を2進数に変換するには、整数部と小数部で計算方法が異なります。それぞれをわかりやすく見ていきましょう。

整数編

整数の場合は、2で割っていき「余り」を順に記録していく方法を使います。最後に、余りを「下から読む」ことで2進数の表現が得られます。

たとえば「19」を2進数に変換してみましょう:

19 ÷ 2 = 9 …1
9 ÷ 2 = 4 …1
4 ÷ 2 = 2 …0
2 ÷ 2 = 1 …0
1 ÷ 2 = 0 …1

→ 下から読むと「10011」

よって、19(10進数) = 10011(2進数) です。

小数編

小数の場合は、2を掛けていき「整数部分」を順に記録していく方法を使います。これは、上から順に並べることで2進数の表現が得られます。

たとえば「0.625」を2進数に変換すると:

0.625 × 2 = 1.25 → 整数部分:1
0.25 × 2 = 0.5 → 整数部分:0
0.5 × 2 = 1.0 → 整数部分:1

→ 上から順に並べて「0.101」

よって、0.625(10進数) = 0.101(2進数) です。

2の補数とは?

コンピュータは引き算が苦手。なので「マイナスの数」も加算で処理したい!それを実現するのが “2の補数”。

たとえば +5 → “00000101” を -5 にするには:

  1. ビット反転 → “11111010”
  2. +1 → “11111011”

→ これが2の補数表現の “-5”

固定小数点と浮動小数点の違い

数値を扱うときには「小数をどうやってメモリに格納するか」という問題があります。その代表的な方法が「固定小数点」と「浮動小数点」です。

固定小数点とは?

固定小数点では、小数点の位置をあらかじめ決めておく方式です。

例えば「小数点は常に小数第2位にある」と決めておくと、「12345」という数字を「123.45」として解釈する、といった具合です。

  • メリット:計算が単純で高速(特に組み込み機器などで有利)
  • デメリット:表現できる範囲(最大・最小の数)が限られてしまう

ここでいう「表現範囲」とは、「この形式で表せる数の大きさの限界」のことです。

浮動小数点とは?

浮動小数点では、小数点の位置を動かせるようにして、非常に大きな数から非常に小さな数まで柔軟に表現できます。

たとえば、-6.5 という数は 2進数で表すと -110.1。これを正規化すると:

-6.5 = -1.101 × 2^2

この「× 2^2」の部分が小数点の位置を表していて、ここが動かせるのが「浮動」たる所以です。

IEEE754という標準形式では、

  • 符号部(1bit)
  • 指数部(8bit)
  • 仮数部(23bit) という構成で表現します。

指数部には「バイアス(+127)」がかかっているので、2^2 を表すときは 2 + 127 = 129(2進数で 10000001)になります。

  • メリット:非常に大きな数や非常に小さな数も表現できる(=表現範囲が広い)
  • デメリット:演算に時間がかかる、誤差が出やすい

このように、精度を取るか、速度・単純さを取るかで使い分けるのがポイントです。

誤差とは?

コンピュータの数値計算では、限られたビット数で数を表現するという制約があります。そのため、私たちが思う「正確な結果」が出せないことがあるのです。これを「誤差」といいます。

誤差にはいくつか種類がありますが、ここでは代表的な2つを紹介します。

桁あふれ誤差(オーバーフロー)

これは、扱える最大値を超えてしまうときに起こる誤差です。

例えば、8ビットの符号なし整数型(0〜255)があるとします。

このとき、255に1を足すと「256」になるはずですが、8ビットでは256を表せません。どうなるかというと、計算結果は一周して「0」になってしまいます。

例: 255(11111111)+ 1 → 00000000(= 0)

本来ならエラーにすべきですが、機械的には「ビットがあふれて最下位に戻る」動きになってしまうため、注意が必要です。

桁落ち誤差(キャンセル誤差)

これは、非常に近い値同士の引き算を行ったときに起こる誤差です。

たとえば、 1000000.5 − 1000000 = 本来なら「0.5」

しかし、計算機内部では桁数に制限があるため、 「0.5」という非常に小さな差がうまく表現できず、0や0.49999…といったズレが生じることがあります。

これは特に浮動小数点演算で起こりやすく、数値シミュレーションや統計処理などでは要注意です。

シフト演算とは?

シフト演算とは、ビット列を左右にずらす操作のことです。

たとえば「00101100」という2進数があったときに、左に1ビットシフトすると「01011000」になります。

シフト演算には2つの種類があります:

論理シフト(Logical Shift)

  • 左シフト(LSL):全体を左に1ビットずらし、右端に0を入れる。
  • 右シフト(LSR):全体を右に1ビットずらし、左端に0を入れる。

例: 00101100(= 44) → 左シフト → 01011000(= 88)

※左に1ビットシフトすることで、2倍になるという性質があります。

算術シフト(Arithmetic Shift)

  • 符号付き整数の処理に使われるシフト方法です。
  • 左シフトは論理シフトと同じ。
  • 右シフトでは、最上位ビット(符号)を維持しながら他を右にずらします。

例: 11100100(-28)→ 算術右シフト → 11110010(-14)

このように、符号を保持したままシフトできるのが算術シフトの特徴です。


ビット演算とは?

ビット演算とは、2進数の各ビット単位で行う論理的な演算のことです。

代表的なビット演算には次のようなものがあります:

AND(論理積)

両方が1のときだけ1になる

A = 10101010
B = 11001100
A AND B = 10001000

OR(論理和)

どちらかが1なら1になる

A = 10101010
B = 11001100
A OR B = 11101110

XOR(排他的論理和)

片方だけが1のときに1になる

A = 10101010
B = 11001100
A XOR B = 01100110

これらのビット演算は、

  • 条件分岐
  • フラグの操作
  • マスク処理(特定のビットだけを取り出す) など、プログラムの中で非常に重要な役割を果たしています。

たとえば「奇数か偶数かを判定する」場合、AND演算を使って最下位ビットを調べるなど、様々な活用法があります。

アナログとデジタルの違い

「アナログ」と「デジタル」という言葉はよく聞くけれど、実際には何が違うのでしょうか?

アナログとは、連続的に変化する量のことを指します。たとえば、人の声、温度、光の強さなどはすべて滑らかに変化しますよね。これがアナログです。グラフにすると滑らかな曲線になります。

一方、デジタルは一定のステップで区切られた離散的な量を扱います。コンピュータは0と1しか扱えないので、滑らかな変化をそのまま理解することはできません。

そのため、コンピュータで音声や映像などのアナログ情報を扱うには、アナログをデジタルに変換する(A/D変換)必要があるのです。

逆に、コンピュータの中で処理されたデジタル信号をスピーカーなどで再生する場合には、デジタルをアナログに戻す(D/A変換)必要があります。


A/D変換とD/A変換とは?

A/D変換(アナログ→デジタル変換)は、アナログ信号をコンピュータが理解できるように数値化する処理です。

例えば温度センサーが”27.3℃”というアナログな値を感知しても、コンピュータにはそれをそのまま渡せません。そこで、まずこの値を電圧として読み取り、その電圧を一定間隔で読み取り(標本化)、段階的な値に丸め(量子化)、最終的に2進数にして(符号化)渡すのです。

D/A変換(デジタル→アナログ変換)は逆で、コンピュータの中で作られたデジタル信号(たとえば音楽のデータ)を、スピーカーなどを通してアナログの音波として再現するための仕組みです。

なぜ必要?

  • コンピュータはデジタルでしか処理できない。
  • 現実世界(人間や自然)はアナログで動いている。 → だからこの「橋渡し」が必要になるのです!

PCM伝送方式とは?

PCM(Pulse Code Modulation:パルス符号変調)は、アナログ信号をデジタル信号として送るための基本的な仕組みです。

音声や映像など、現実世界のアナログ情報をコンピュータで扱うためには、次の3ステップを踏みます:

  1. 標本化(サンプリング)
  2. 量子化
  3. 符号化

この流れを丁寧に解説していきます。 これがMP3やデジタル音声のベース!

標本化とは?

標本化とは、連続的なアナログ信号を一定時間ごとに区切って値を取り出す作業です。

例えば、CD音質は44.1kHzで録音されます。これは1秒間に44,100回もアナログの音を記録しているという意味です。

イメージとしては、滑らかな音の波を1秒間に細かくスナップショットで「カシャッカシャッ」と連続で撮っているようなものです。

このとき、標本化の回数(サンプリング周波数)が多ければ多いほど、元の音に近づけます。

量子化とは?

量子化は、標本化で取り出した連続的な値を「近い段階の値」に丸める作業です。

たとえば「音量が 3.78」みたいな連続的な値があったとして、それを「3.5」「4.0」「4.5」など決まった段階の中から最も近い値に変換します。

この段階の数を多くすればするほど、元のアナログに近い表現が可能になります。段階数が多い = 精度が高い = 高音質になります。

符号化とは?

符号化は、量子化で得た段階値を2進数で表す処理です。

たとえば、8段階で音量を表すとき、各段階を以下のように2進数で表せます:

000 → 最小、 001、010、…、111 → 最大

段階数が多くなると、より多くのビットが必要になります。

  • 8段階 → 3ビット
  • 16段階 → 4ビット

このようにして、アナログな音や映像がコンピュータで扱える「0と1のデータ」に変換されるのです。


おわりに

「難しい」と思っていた数の世界、実は計算や理由がわかればかなりシンプル!

「アナログ」と「デジタル」の違いや、それをつなぐA/D変換・PCM方式などについては、コンピュータが現実世界とやり取りするための大切な基礎です。

今回のように、「なぜこの処理が必要なのか?」という視点で理解すれば、暗記に頼らず直感的に理解できるようになります。

ぜひこの記事を参考に、基本情報技術者試験の基礎理論パートに自信を持って臨んでくださいね!

最近の投稿