2の補数と小数の表し方|負の数はどう入れるか【基本情報技術者試験 科目A】

基本情報技術者試験

科目A 第1章 基礎理論1-2 2の補数と小数の表し方最終更新 2026-09-24

コンピュータが数を入れる箱は、桁数が決まっています。 8ビットなら 0 と 1 が8個で、マイナスの記号を書く場所はありません。 それでも引き算はできます。この回では、負の数の作り方(2の補数)と、 小数がどう表されるかを確かめます。

出典:基本情報技術者試験 シラバス Ver9.2 大分類1 基礎理論/中分類1 基礎理論/1. 離散数学

(2)数値の表現

負の数の表現(補数表現),小数の表現を理解する。

用語例

固定小数点数,単精度浮動小数点数,倍精度浮動小数点数,仮数,指数,BCD(Binary Coded Decimal:2 進化10 進),パック10 進数

負の数を入れる場所がない

8ビットの箱には、0 と 1 が8個しか並びません。 素直に考えると「左端の1ビットを符号にする」やり方が浮かびます。 0 ならプラス、1 ならマイナス、という決め方で、この1ビットを符号ビットといいます。ところが、これには具合の悪いところが2つあります。

左端を符号にすると困ること

0 が2つできる … 0000 0000(+0)と 1000 0000(−0)が別の並びになる

引き算の回路が別に要る … 足し算とは別の手順で計算しなければならない

そこで使うのが2の補数で、これを使うと引き算がそのまま足し算になります。 回路が1つで済むので、いまのコンピュータはこの表し方を使っています。

2の補数の作り方 ── 反転して、1 を足す

ある数のマイナスを作る手順は2つだけです。すべてのビットを反転(0 を 1 に、1 を 0 に)して、1 を足す。 2進数の足し算は、1 + 1 が桁上がりして 10 になる点だけ10進数と違います。 8ビットで −5 を作ってみます。

5 は        0000 0101
すべて反転  1111 1010
1 を足す    1111 1011  ← これが −5

正しく作れたかは、縦に足して確かめます。

     0000 0101   5
+   1111 1011   −5
  ─────────────
1    0000 0000   ← 左へはみ出した 1 が9桁目

9桁目は8ビットの箱に入らないので捨てます。残るのは 0000 0000=0。足して 0 になれば、マイナスとして正しく作れています。

確かめ算に注目してください。5 と −5 を足すと 0 になりました。 これが「マイナスとして正しい」ことの意味です。足して 0 になる相手を、その数の補数と呼びます。

⚠️ 8ビットの箱で表せるのは −128 〜 127 です。 左端が 1 の並びはすべて負の数を表すので、正の数として使えるのは 127 までになります。

練習

8ビットの2の補数で −6 を表すと、どれですか。

引き算が足し算になる

12 − 5 を計算します。引き算のかわりに、12 に −5 を足します。

     0000 1100   12
+   1111 1011   −5
  ─────────────
1    0000 0111   ← 9桁目は捨てる

残るのは 0000 0111=7。12 − 5 = 7 と一致します。

引き算の手順は要らず、マイナスを作って足すだけで答えが出ます。

2の補数の使い方

  1. 引く数のマイナスを作る。すべて反転して、1 を足します。元の数の桁数(8ビットなら8桁)のまま作ります。
  2. 足す。ふつうの2進数の足し算です。
  3. 決めた桁からあふれた分は捨てる。8ビットなら9桁目は無視します。箱に入らないからです。
  4. 左端が 1 なら、答えは負の数。いくつなのかを読むときは、もう一度反転して 1 を足します。出てきた数にマイナスを付けたものが答えです。

最後の「読むときはもう一度2の補数を取る」を忘れると、1111 1011 を 251 と読んでしまいます。同じ並びが、決め方しだいで 251 にも −5 にもなります。

練習

8ビットの2の補数として、1111 0000 はどの数を表しますか。

小数は、小数点の右も重みで決まる

小数も考え方は同じです。小数点の右へ動くたびに、重みが半分になります。 2進数の 11.01 を10進数にします。

位 2 1 小数点 1/2 1/4
2進数 11.01 1 1 . 0 1
この位が表す数 2 1 点の位置 0 0.25

2 + 1 + 0 + 0.25 = 3.25

小数点の右は 1/2、1/4、1/8 と、半分ずつ小さくなっていきます。

先に、ひとつ予想してみましょう

2進数の 1011.01 は、10進数でいくつですか。

ここで問題になるのが、小数点をどこに置くかです。置き方が2つあり、どちらも点そのものは記録しません。

表し方 小数点の位置の決め方 向いている場面
固定小数点数 「下位4ビットは小数部」のように先に決めておく。並びの中に点は持たない 扱う桁数が決まっている計算。金額など
浮動小数点数 数字の並びと、点を動かす量を別々に持つ けた違いに大きい数・小さい数も同じ形で扱いたいとき

浮動小数点数では、数字の並びを仮数、点を動かす量を指数といいます。 10進数で 3,200 を 3.2×10³ と書くのと同じで、仮数が 3.2、指数が 3 にあたります。2進数では 仮数 × 2 の 指数 乗 です。 ビット数を多く使って精度を上げたものを倍精度(一般に64ビット)、少ないほうを単精度(同32ビット)と呼びます。

⚠️ 10進数を1桁ずつ4ビットの2進数で持つ表し方もあります。BCD(2進化10進)で、 これを詰めて格納したものがパック10進数です。金額のように10進数のまま扱いたい場面で使われます。

まとめ

この回で持ち帰ること

1. 負の数は2の補数で表す。作り方はすべて反転して 1 を足す

2. 正しく作れたかは足して 0 になるかで確かめる(あふれた桁は捨てる)

3. 引き算はマイナスを作って足す。左端が 1 なら答えは負の数で、読むにはもう一度2の補数を取る

4. 小数点の右の重みは 1/2、1/4 と半分ずつ。小数点を固定するのが固定小数点数、指数で動かすのが浮動小数点数

次に読む

この記事で引用した資料

いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。

本文の例(5・6・12 などの8ビット表現、1011.01)と練習問題は、すべて当サイトが説明のために作ったものです。

Copied title and URL