COMPLEMENT

1の補数・2の補数のやり方

補数は、コンピュータが負の数を扱うために使われる考え方です。手順はシンプルで、「反転」と「+1」がポイントです。

先に練習したい方:
→ 無料の補数を開く

1の補数とは?

1の補数は、2進数の0と1をすべて反転したものです。

元の値:10110010 1の補数:01001101

2の補数とは?

2の補数は、1の補数に1を足して求めます。

① 0と1を反転
10110010 → 01001101
② 1を足す
01001101 + 1 = 01001110

したがって、10110010 の2の補数は 01001110 です。

負の10進数を2の補数で表す

たとえば、8bitで -13 を表してみます。

① 13を2進数へ
00001101
② 0と1を反転
11110010
③ 1を足す
11110011

したがって、8bitで -13 は 11110011 です。

なぜ2の補数を使うの?

2の補数を使うと、引き算を専用回路で処理せず、足し算と同じ仕組みで扱いやすくなります。そのため、コンピュータの符号付き整数表現で広く使われています。

よくあるミス

2の補数を作る手順

  1. 正の値を指定bit幅の2進数で表します。
  2. 0と1をすべて反転して1の補数を作ります。
  3. その値に1を加えると2の補数になります。

具体例:8bitで-5を表す

+5 = 00000101
反転 → 11111010
+1 → 11111011
したがって8bitの2の補数表現で -5 は11111011です。

2の補数から値を読む

最上位bitが1なら負数として扱う問題では、反転して1を加えることで絶対値を確認できます。bit幅が変わると表現範囲も変わるため、問題文のbit数を必ず確認します。

よくある間違い

反転しただけで止めない
反転だけは1の補数です。2の補数ではさらに1を加えます。また桁あふれは指定bit幅の外として扱います。

試験でのポイント

n bitの2の補数表現の範囲は -2n-1 〜 2n-1-1 です。8bitなら -128〜127 になります。

2の補数とは?

2の補数は、コンピュータで負の整数を表現するときによく使われる方法です。決められたbit幅の中で正負の整数を扱いやすく、加算回路を利用して減算も処理できます。

2の補数の求め方

負の値を作る基本手順は「正の値を2進数で表す → 0と1を反転する → 1を加える」です。

8bitで-5を表す
+5:00000101
反転:11111010
1を加える:11111011
したがって -5 は11111011です。

1の補数と2の補数の違い

0と1を反転しただけの値が1の補数です。そこへさらに1を加えたものが2の補数です。「反転したところで答えにしてしまう」のが代表的なミスです。

2の補数から10進数へ戻す方法

負数として扱う2進数は、0と1を反転して1を加えることで絶対値を確認できます。問題では最初に8bit、16bitなどのbit幅を確認してください。

8bitの2の補数で表せる範囲

n bitの2の補数表現では、一般に -2n-1 から 2n-1-1 までを表せます。8bitなら-128〜127です。

手順を覚えたら反復練習
1の補数・2の補数・負の10進数の2の補数表現を自動出題します。

図で理解する:8ビットの「−5」

8ビットで +5 を表し、すべてのビットを反転してから1を足します。ビット幅は必ず固定します。

STEP 1 +5
00000101
↓ 0と1を反転
STEP 2 1の補数
11111010
↓ 1を加える
STEP 3 2の補数(−5)
11111011

実務ではどこで使う?

符号付き整数を扱うCPUの演算や、バイナリデータの解析で使われます。例えば8ビット符号付き整数の範囲は −128〜127 です。表示されるビット列だけでなく「符号付きか」「何ビットか」を確認しましょう。

確認問題:8ビットで −3 を表すと?

+3 は 00000011 → 反転して 11111100 → +1 で 11111101 です。

補数トレーニングで練習する →

計算で確かめる:8ビットの2の補数

例題:-13を8ビットで表す

+13 = 00001101

各ビットを反転:11110010

1を加える:11110011(-13の2の補数表現)

検算するには、11110011を符号なし整数243として読み、243 - 256 = -13と考えます。8ビットの2の補数で表せる範囲は-128〜127です。

よくある間違い

「反転しただけ」で終わると1の補数になってしまいます。2の補数は反転後に1を加える必要があります。また、何ビットで表すかを決めないと、負数のビット列を一意に定められません。

理解度チェック:8ビットで-5を表すと?

+5は00000101、反転して11111010、1を加えて11111011です。

補数の練習問題を解く → ビットシフトとの関係を見る →