「マイナスの数って、0と1だけでどうやって表すの?」「浮動小数点数って聞いただけで頭が痛くなる…」という声をよく聞きます。基本情報技術者試験の数値表現の分野は、最初にイメージを掴めるかどうかがすべてです。
この記事では、基本情報の負の数と小数の表現について、「なぜそういう仕組みになっているのか」という理由から丁寧に解説します。補数・固定小数点・浮動小数点・BCD(2進化10進)の仕組みを理解して、試験の数値表現問題を得点源にしましょう。
- 負の数を表す「補数」の仕組みと求め方が身につく
- 固定小数点数と浮動小数点数の違いが明確にわかる
- 浮動小数点数の符号・仮数部・指数部の役割が理解できる
- 桁落ち・情報落ち・オーバーフローの違いを整理できる
負の数と小数の表現を基本情報試験で完全理解する

負の数をコンピュータで表す「補数」の仕組み
コンピュータは「0」と「1」しか扱えません。「−5」のようなマイナスの数をそのまま記録することができないのです。そこで考えられたのが補数(ほすう)表現です。
補数とは、ある数に加えるとちょうど「桁が上がる数」のことです。たとえば10進数で「7の10の補数」は「3」です(7+3=10でちょうど桁上がりするから)。コンピュータでは2進数の補数、特に「2の補数」を使って負の数を表現します。
たとえば8ビットで「5 − 5 = 0」を計算するとき、5の2の補数(−5の表現)を足すと:
| 数 | 8ビット2進数 |
|---|---|
| +5 | 00000101 |
| −5(2の補数) | 11111011 |
| 足した結果 | 100000000(9桁目が出て8ビットでは0になる) |
8ビットの範囲に収まらない桁(最上位ビットへの繰り上がり)は無視するルールなので、結果はちょうど「00000000(=0)」になります。引き算をしなくても足し算で同じ結果が出るのが補数の魔法です。
2の補数の求め方を3ステップで完全マスター
2の補数の求め方は手順が決まっています。この3ステップを覚えておけば試験本番でも確実に計算できます。
例:+5を8ビットで表すと「00000101」
「00000101」を反転 → 「11111010」(これを「1の補数」と呼ぶ)
「11111010 + 1」= 「11111011」← これが−5の2の補数表現
固定小数点数とは?仕組みと特徴
コンピュータで小数を表現する方法のひとつが固定小数点数です。「小数点の位置があらかじめ決まっている」数値表現で、計算が速い・仕組みが単純という特徴があります。
たとえば「8ビットで小数点を右から4ビット目に固定する」と決めたとき、「00001100」という2進数は次のように解釈されます:
| ビット | 0 | 0 | 0 | 0 | (小数点) | 1 | 1 | 0 | 0 |
|---|---|---|---|---|---|---|---|---|---|
| 重み | 8 | 4 | 2 | 1 | 0.5 | 0.25 | 0.125 | 0.0625 |
この場合「0.5 + 0.25 = 0.75」となり、「00001100」は「0.75」を表します。固定小数点数はシンプルで高速ですが、表せる数の範囲が狭い(非常に大きな数や非常に小さな数が表せない)という制約があります。
- 計算が速い・ハードウェア実装がシンプル
- 精度が一定(小数点以下の桁数が固定)
- 組み込みシステムや音声処理で今も使用される
- 表せる数の範囲が浮動小数点より狭い
- 非常に大きな数や非常に小さな数の表現が苦手
浮動小数点数の3要素(符号・仮数部・指数部)
固定小数点の欠点(表せる範囲の狭さ)を解消するために生まれたのが浮動小数点数です。「小数点の位置を自在に動かせる」数値表現で、非常に大きな数も非常に小さな数も表現できます。
浮動小数点数は次の3つの部分で構成されています:
| 要素 | 役割 | 例(単精度32bit) |
|---|---|---|
| 符号部(Sign) | 正(0)か負(1)かを表す | 1ビット |
| 指数部(Exponent) | 小数点をどこに置くかを表す | 8ビット |
| 仮数部(Mantissa) | 数値の中身(有効桁)を表す | 23ビット |
浮動小数点数の値は「符号 × 仮数 × 2^指数」という形で表されます。たとえば「1.5 × 2³ = 12.0」のように、仮数部に数値の実体があり、指数部が小数点の位置を動かします。
単精度(32bit)と倍精度(64bit)の比較
浮動小数点数には「単精度」と「倍精度」の2種類があります。精度とは「どれだけ細かく数値を表現できるか」のことで、ビット数が多いほど精度が高くなります。
| 種類 | 総ビット数 | 符号部 | 指数部 | 仮数部 | 有効桁数 |
|---|---|---|---|---|---|
| 単精度(float) | 32ビット | 1ビット | 8ビット | 23ビット | 約7桁 |
| 倍精度(double) | 64ビット | 1ビット | 11ビット | 52ビット | 約15桁 |
倍精度は精度が高い分、データサイズが2倍になります。科学計算や財務計算など高い精度が必要な場面では倍精度が使われ、3Dゲームのグラフィックスなどリアルタイム処理が優先される場面では単精度が使われることが多いです。
基本情報試験で狙われる数値表現の出題対策

補数計算の試験頻出パターンと解き方
基本情報で補数計算が問われるときのパターンはほぼ決まっています。事前に把握しておくと本番で慌てません。
| 出題パターン | 解き方のポイント |
|---|---|
| 「○○₁₀の2の補数を8ビットで表せ」 | 10進数→2進数→ビット反転→+1の手順で計算 |
| 「2の補数表現の○○₂は10進数でいくつか」 | 最上位ビットが1なら負数。補数の逆手順(−1→ビット反転)で絶対値を求めてマイナスをつける |
| 「オーバーフローが起きる計算はどれか」 | 正+正=負、負+負=正になったらオーバーフロー |
特に「補数表現の2進数を10進数に戻す問題」は逆手順が必要になるため、混乱しやすいです。「最上位ビットが1なら負数→−1してビット反転→絶対値確定→マイナスをつける」の手順を繰り返し練習しておきましょう。
浮動小数点の正規化とIEEE754の基礎
浮動小数点数には「正規化」という重要な概念があります。正規化とは「仮数部の最上位ビットが必ず1になるように指数を調整すること」です。
たとえば「0.00101 × 2⁰」という数値は、正規化すると「1.01 × 2⁻³」になります。最上位ビットを常に1に保つことで、無駄なビットをなくし精度を最大化できます。IEEE754という国際規格ではこの正規化ルールが定められており、現代のほぼすべてのコンピュータで採用されています。
正規化された仮数部の最上位の「1」は省略して格納される(隠れビット)。これにより、単精度23ビットの仮数部で実質24ビット分の精度が得られる。試験でも「隠れビット」という概念が問われることがある。
桁落ち・情報落ち・オーバーフローの違い
浮動小数点数の計算では、精度に関する3つの問題が生じることがあります。試験でもこの3つの違いが問われるので整理しておきましょう。
| 現象 | 意味 | 例 |
|---|---|---|
| 桁落ち(Cancellation) | 値が近い数値の引き算で有効桁数が大幅に減少する | 1.234567 − 1.234566 → 上位の桁が消えて精度激減 |
| 情報落ち(Truncation) | 絶対値の大きな数と小さな数の足し算で小さい数が無視される | 1000000 + 0.000001 → 0.000001が切り捨てられる |
| オーバーフロー | 計算結果が表現できる最大値を超える | 8ビットで127+1 → −128になってしまう |
BCD(2進化10進数)の仕組みと使いどころ
BCD(Binary Coded Decimal)は、10進数の各桁を4ビットの2進数で個別に表現する方法です。通常の2進数変換とは異なり、10進数の形をそのまま保つのが特徴です。
たとえば「93」をBCDで表すと:
| 10進数の桁 | BCD(4ビット) |
|---|---|
| 9 | 1001 |
| 3 | 0011 |
→ BCD表現:1001 0011(8ビット)
通常の2進数なら「93 = 01011101」ですが、BCDでは「1001 0011」と全然違います。BCDは計算の効率は低いですが、10進数の表示精度が必要な場面(金融・POS端末・計測器など)で使われています。なお、BCDをより少ないビット数に詰めた表現を「パック10進数」と呼び、COBOL言語などで使われています。
まとめ:数値表現の学習順序と最短攻略法
基本情報の数値表現は、関連する概念が多く見えますが、学習する順序を守れば効率よくマスターできます。
- まずn進数(2進数・16進数)の変換を完璧にする(土台)
- 次に2の補数を求める手順を3回練習する
- 固定小数点と浮動小数点の違いをテーブルで整理する
- 単精度のビット構成(1・8・23)を暗記する
- 桁落ち・情報落ち・オーバーフローを事例と一緒に覚える
数値表現の土台となるn進数の変換についてはn進数の完全攻略記事もあわせて確認してください。また、補数の理解を深めたら算術演算(加算・減算)の記事でさらに理解を深めることができます。
- 1の補数と2の補数の違いは何ですか?
1の補数はビットを反転させるだけで得られます。2の補数は1の補数にさらに1を足したものです。コンピュータでは2の補数が広く使われています。理由は、2の補数には「ゼロの表現が1つだけ」という利点があるからです(1の補数だと「+0」と「−0」の2種類が生まれてしまう問題があります)。
- 浮動小数点数を使うと必ず誤差が生じますか?
はい、2進数の浮動小数点数では、0.1のように2進数で正確に表せない小数は必ず誤差が生じます。これを「丸め誤差」と言います。プログラミングで「0.1 + 0.2 = 0.30000000000000004」のような結果が出るのはこのためです。試験でも「丸め誤差が生じる理由」が問われることがあります。
- BCDは現代でも使われていますか?
はい、今でも使われています。特に金融システムや会計ソフト、POS端末など「10進数での精度が重要な分野」でBCDまたはその派生形式が使われています。COBOLで書かれたレガシーシステムでも広く使用されています。


コメント