基本情報技術者試験の負の数と小数の表現を完全解説!補数・浮動小数点のすべて

「マイナスの数って、0と1だけでどうやって表すの?」「浮動小数点数って聞いただけで頭が痛くなる…」という声をよく聞きます。基本情報技術者試験の数値表現の分野は、最初にイメージを掴めるかどうかがすべてです。

この記事では、基本情報の負の数と小数の表現について、「なぜそういう仕組みになっているのか」という理由から丁寧に解説します。補数・固定小数点・浮動小数点・BCD(2進化10進)の仕組みを理解して、試験の数値表現問題を得点源にしましょう。

この記事のポイント
  • 負の数を表す「補数」の仕組みと求め方が身につく
  • 固定小数点数と浮動小数点数の違いが明確にわかる
  • 浮動小数点数の符号・仮数部・指数部の役割が理解できる
  • 桁落ち・情報落ち・オーバーフローの違いを整理できる
無料

基本情報技術者試験 過去問アプリ

本番形式で繰り返し解ける。スキマ時間に1問から

2,000問以上収録
無料で過去問を解く
目次

負の数と小数の表現を基本情報試験で完全理解する

コンピュータの数値表現

負の数をコンピュータで表す「補数」の仕組み

コンピュータは「0」と「1」しか扱えません。「−5」のようなマイナスの数をそのまま記録することができないのです。そこで考えられたのが補数(ほすう)表現です。

補数とは、ある数に加えるとちょうど「桁が上がる数」のことです。たとえば10進数で「7の10の補数」は「3」です(7+3=10でちょうど桁上がりするから)。コンピュータでは2進数の補数、特に「2の補数」を使って負の数を表現します。

補数を使う理由 2の補数を使うと「引き算」を「足し算」に変換できます。引き算の回路を別途用意しなくて済むため、コンピュータの回路がシンプルになります。これが補数表現が使われる最大の理由です。

たとえば8ビットで「5 − 5 = 0」を計算するとき、5の2の補数(−5の表現)を足すと:

8ビット2進数
+500000101
−5(2の補数)11111011
足した結果100000000(9桁目が出て8ビットでは0になる)

8ビットの範囲に収まらない桁(最上位ビットへの繰り上がり)は無視するルールなので、結果はちょうど「00000000(=0)」になります。引き算をしなくても足し算で同じ結果が出るのが補数の魔法です。

2の補数の求め方を3ステップで完全マスター

2の補数の求め方は手順が決まっています。この3ステップを覚えておけば試験本番でも確実に計算できます。

STEP
元の2進数を書く

例:+5を8ビットで表すと「00000101」

STEP
すべてのビットを反転(0→1, 1→0)

「00000101」を反転 → 「11111010」(これを「1の補数」と呼ぶ)

STEP
1を足す

「11111010 + 1」= 「11111011」← これが−5の2の補数表現

2の補数では、最上位ビット(一番左のビット)が「0なら正の数」「1なら負の数」を意味します。8ビットの場合、表せる範囲は−128〜+127です(0を正の側に含めるため、正の最大は127)。

固定小数点数とは?仕組みと特徴

コンピュータで小数を表現する方法のひとつが固定小数点数です。「小数点の位置があらかじめ決まっている」数値表現で、計算が速い・仕組みが単純という特徴があります。

たとえば「8ビットで小数点を右から4ビット目に固定する」と決めたとき、「00001100」という2進数は次のように解釈されます:

ビット0000(小数点)1100
重み8421 0.50.250.1250.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」のように、仮数部に数値の実体があり、指数部が小数点の位置を動かします。

指数部にも正負があるため、「イクセス表現(げたばき表現)」という方法で負の指数を表します。単精度ではバイアス値127を使い、実際の指数に127を足した値を格納します。たとえば指数が3なら「3+127=130」を格納します。

単精度(32bit)と倍精度(64bit)の比較

浮動小数点数には「単精度」と「倍精度」の2種類があります。精度とは「どれだけ細かく数値を表現できるか」のことで、ビット数が多いほど精度が高くなります。

種類総ビット数符号部指数部仮数部有効桁数
単精度(float)32ビット1ビット8ビット23ビット約7桁
倍精度(double)64ビット1ビット11ビット52ビット約15桁

倍精度は精度が高い分、データサイズが2倍になります。科学計算や財務計算など高い精度が必要な場面では倍精度が使われ、3Dゲームのグラフィックスなどリアルタイム処理が優先される場面では単精度が使われることが多いです。

基本情報の試験では「単精度・倍精度のビット構成(符号1・指数8・仮数23 vs 符号1・指数11・仮数52)」が問われることがあります。この数値は暗記しておくと確実に点が取れます。

基本情報試験で狙われる数値表現の出題対策

基本情報技術者試験の対策

補数計算の試験頻出パターンと解き方

基本情報で補数計算が問われるときのパターンはほぼ決まっています。事前に把握しておくと本番で慌てません。

出題パターン解き方のポイント
「○○₁₀の2の補数を8ビットで表せ」10進数→2進数→ビット反転→+1の手順で計算
「2の補数表現の○○₂は10進数でいくつか」最上位ビットが1なら負数。補数の逆手順(−1→ビット反転)で絶対値を求めてマイナスをつける
「オーバーフローが起きる計算はどれか」正+正=負、負+負=正になったらオーバーフロー

特に「補数表現の2進数を10進数に戻す問題」は逆手順が必要になるため、混乱しやすいです。「最上位ビットが1なら負数→−1してビット反転→絶対値確定→マイナスをつける」の手順を繰り返し練習しておきましょう。

よくある間違いとして「最上位ビットが1でも単純に普通の2進数として計算してしまう」があります。2の補数表現の問題では必ず「最上位ビットが何か」を最初に確認する習慣をつけてください。

浮動小数点の正規化とIEEE754の基礎

浮動小数点数には「正規化」という重要な概念があります。正規化とは「仮数部の最上位ビットが必ず1になるように指数を調整すること」です。

たとえば「0.00101 × 2⁰」という数値は、正規化すると「1.01 × 2⁻³」になります。最上位ビットを常に1に保つことで、無駄なビットをなくし精度を最大化できます。IEEE754という国際規格ではこの正規化ルールが定められており、現代のほぼすべてのコンピュータで採用されています。

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ビット)
91001
30011

→ BCD表現:1001 0011(8ビット)

通常の2進数なら「93 = 01011101」ですが、BCDでは「1001 0011」と全然違います。BCDは計算の効率は低いですが、10進数の表示精度が必要な場面(金融・POS端末・計測器など)で使われています。なお、BCDをより少ないビット数に詰めた表現を「パック10進数」と呼び、COBOL言語などで使われています。

BCDは試験で「ゾーン10進数」「パック10進数」という形で出題されることがあります。ゾーン10進数は1桁を1バイト(8ビット)で表し、上位4ビットにゾーン(F)・下位4ビットにBCDを格納します。パック10進数は2桁を1バイトにまとめた省スペース版です。

まとめ:数値表現の学習順序と最短攻略法

基本情報の数値表現は、関連する概念が多く見えますが、学習する順序を守れば効率よくマスターできます。

数値表現の学習順序
  • まず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で書かれたレガシーシステムでも広く使用されています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次