2の補数表現とは?コンピュータで負の数(マイナス)を表す標準の方式

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

2の補数表現とは(全体像)

2の補数は、コンピュータでマイナスの数を表すための決まったルールのこと。コンピュータは0と1しか持っていないので、「-3」のような負の数も0と1の並びで表す必要がある。その標準的なやり方が2の補数だ。

ポイントは、先頭のビットが符号の役割を持つこと。先頭が0なら正の数、1なら負の数になる。とはいえ、ただ符号ビットを立てるのではなく、「反転して+1」という決まった手順でマイナスを作るのがミソだ。

この方式が選ばれている理由は、引き算を足し算として処理できるから。コンピュータの中身(加算器)をシンプルにできるので、ハードウェアにとってありがたいしくみになっている。


詳しく:この手順と範囲だけ覚えれば戦える

ここが記事の心臓部。まずは作り方の2ステップ

2の補数の作り方(例:8ビットで -3)

手順操作結果
元の数+3 を2進数で書く0000 0011
①反転全ビットを反転(1の補数)1111 1100
②+11を足す1111 1101(= -3)

このように「全ビット反転 → +1」でマイナスのビット並びができる。途中の「反転しただけ」の状態(1111 1100)は1の補数と呼ばれ、2の補数とは1つ違う別ものなので混同に注意だ。

次に、表せる範囲。nビットで表せる数は決まっている。

表せる範囲(nビット)

ビット数表せる範囲
8ビット-128 〜 +127
16ビット-32768 〜 +32767
一般(nビット)-2^(n-1) 〜 +2^(n-1)-1

ここで大事なのは、範囲が左右対称ではないこと。マイナス側が1つ多い(8ビットなら-128まであるのに+127まで)。これは0を表す並びが1つだけ(全部0)で済むからだ。1の補数だと+0と-0の2つができてしまうが、2の補数では0は1つだけで無駄がない。

つまり、2の補数は「0が1つ・範囲がマイナス側に1多い」と覚えればいい。

わかりやすく言い換えると

要するに、2の補数は「反転して+1でマイナスを作る」、これだけ。

①まず元の正の数を2進数で書く

②全部のビットをひっくり返す(0↔1)

③最後に+1する → これがマイナスの正体

便利さのイメージは「引き算を、足し算の振りをして解く」こと。A−Bを計算したいとき、Bのマイナス(2の補数)を作ってAに足せば、答えは引き算と同じになる。だから引き算専用の回路が要らず、足し算回路を使い回せるんだ。


試験のツボ

🔴 一番出る:作り方は「反転して+1」

①元の数を2進数で書く

②全ビットを反転する(1の補数)

③+1すると2の補数(マイナス)になる

🔴 次に出る:表せる範囲はマイナス側が1多い

①8ビット=-128〜+127

②nビット=-2^(n-1)〜+2^(n-1)-1

🟡 押さえると安定:0は1つだけ・引き算は加算でできる

①2の補数は0が単一(1の補数は+0と-0の二重)

②A-B=A+(-B)で加算器を使い回せる


よくある間違い

「1の補数と2の補数は同じ」→ ✗  1の補数は反転だけ。2の補数はそれに+1する。1つ違う。

「8ビットの範囲は-127〜+127で左右対称」→ ✗  マイナス側が1多く、-128〜+127。0が1つで済むぶんの差。

「マイナスを表すには符号ビットを1にするだけ」→ ✗  反転して+1する手順が必要。先頭1にしただけでは正しい値にならない。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(作り方)

📝 オリジナル問題 1 2の補数の作り方

2の補数の作り方に関する次の記述のうち、正しいものはどれか。

  1. 2の補数は、元の数の全ビットを反転するだけで得られ、+1する操作は不要である
  2. 2の補数は、元の数の全ビットを反転し、さらに1を足すことによって得られる
  3. 2の補数は、元の数の先頭ビットだけを1に書き換えることによって得られる
  4. 2の補数は、元の数の全ビットを反転し、さらに2を足すことによって得られる
シーピードラ
シーピードラ 解答・解説

解答は 2 だぜ。

2の補数は「全ビットを反転して、+1する」。これでマイナスのビット並びになる。例えば8ビットの+3(0000 0011)なら、反転して1111 1100、+1して1111 1101が-3だ。

選択肢1は「反転だけ」で、これは1の補数。選択肢3の「先頭ビットだけ1」では正しい値にならない。選択肢4の「+2」も誤りで、足すのは1だぜ。

選択肢判定理由
1反転だけは1の補数
2反転して+1で正しい
3先頭1だけでは正しい値にならない
4足すのは2ではなく1

オリジナル問題2(表せる範囲)

📝 オリジナル問題 2 2の補数の表現範囲

8ビットの2の補数で表せる数の範囲に関する次の記述のうち、正しいものはどれか。

  1. 8ビットの2の補数では、0から255までの256とおりの正の整数を表すことができる
  2. 8ビットの2の補数では、-127から+127までの左右対称な範囲の整数を表せる
  3. 8ビットの2の補数では、-256から+255までの広い範囲の整数を表すことができる
  4. 8ビットの2の補数では、-128から+127までの範囲の整数を表すことができる
シーピードラ
シーピードラ 解答・解説

解答は 4 だぜ。

8ビットの2の補数は -128〜+127を表せる。マイナス側が1つ多いのがポイントだ。0を表す並びが全部0の1つだけで済むぶん、マイナスに1多く割けるんだな。

選択肢1は符号なし(0〜255)の話。選択肢2の「-127〜+127」は左右対称にしてしまった誤り。選択肢3の範囲は広すぎで誤りだぜ。

選択肢判定理由
1これは符号なし整数の範囲
2実際はマイナス側が1多い
38ビットでこの範囲は表せない
4-128〜+127で正しい

オリジナル問題3(便利さ)

📝 オリジナル問題 3 2の補数の利点

2の補数が使われる理由に関する次の記述のうち、正しいものはどれか。

  1. 2の補数は引き算を足し算として処理でき、0の表し方も1とおりに定まる方式である
  2. 2の補数は0が+0と-0の2とおりあり、その分だけ表せる数の範囲が広がる方式である
  3. 2の補数は引き算専用の回路が別に必要となるが、計算の速度が大幅に上がる方式だ
  4. 2の補数は小数の表現に特化しており、整数のマイナスを表すのには向かない方式だ
シーピードラ
シーピードラ 解答・解説

解答は 1 だぜ。

2の補数の利点は2つ。引き算を足し算で処理できる(A-B=A+(-B))こと、そして0が1つだけに定まることだ。だから加算器を使い回せて回路がシンプルになる。

選択肢2は「0が2とおり」としているが、それは1の補数の弱点。選択肢3は「引き算専用回路が必要」が逆で、要らなくなるのが利点だ。選択肢4の「小数に特化」も誤りで、整数のマイナスを表す方式だぜ。

選択肢判定理由
1引き算を加算で処理・0が単一
20が2とおりなのは1の補数
3引き算専用回路は不要になる
4整数のマイナスを表す方式

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る