基本情報技術者 PR

【基本情報】2の補数について分かりやすく解説!

記事内に商品プロモーションを含む場合があります

まずは10進数で補数について考える

補数とは、「元の数」に足し合わせることで桁上がりする最小の数のことです。例えば、10進数の「23」の補数は「77」になります。なぜなら、23+77=100となり、「77」が「23」と足し合わせて桁上がりする最小の数だからです。

補数を使うメリット

なぜ補数なんて求める必要があるのでしょうか?その理由は「補数を使えば足し算で引き算を表現できるから」です。どういうことか見ていきましょう。

下の式を例に考えてみます。

321 – 44 = 277

補数を使う計算では、計算に使われる数字の中で最大の桁数の数字より更に1つ上の桁数の数字のうち、最小の数字をベースの数字とします。

今回の例で考えてみましょう。計算に使われる数字は「321」と「44」なので最大の桁数の数字は「321」です。この「321」より更に1つ上の桁数の最小の数字は「1000」になります。よって、今回のベースの数字は「1000」です。

次に今回の計算で引く数として使われている「44」に対して、ベースの数字「1000」を基準に補数を考えると「956」になります。なぜなら1000-44=956だからです。

では、補数を使って上の計算式を足し算で表現してみましょう。

321 + 956 = 1277

この結果から最上位の1を省くと「277」となり上の計算式と同じ答えになります。これが足し算で引き算を表現する方法です。

(おまけ)補数には2種類ある
補数には「基数の補数」と「減基数の補数」があります。上で説明した補数は「基数の補数」と呼ばれるものです。「減基数の補数」は基本情報で出題されないのでここでは説明を省略します。

「基数の補数」は「10の補数」とも呼ばれます。また「減基数の補数」は「9の補数」とも呼ばれます。

2進数で考える補数

2進数の補数にも基数の補数と減基数の補数がありますが、ここでも基本情報で出題される基数の補数のみ考えていきます。ちなみに、2進数の基数の補数は2の補数とも呼ばれます。

2の補数も10進数の場合と同じく、「元の数」に足し合わせることで桁上がりする最小の数のことです。例えば「101」の補数は「011」になります。なぜなら101+011=1000だからです。

2の補数は下の手順で求めることが出来ます。

  1. 元の数の0と1を反転させる
  2. 反転させた数に1を足す

「101」の0と1を反転させると「010」になり、これに1を足すと「011」になります。なので「011」は「101」の2の補数です。

負の数を表す補数

通常、8桁の2進数で表現できる数字は00000000~11111111です。10進数で言えば0~255ですね。負の数も表す場合は最上位の位を正負の表現に使います。具体的には最上位が0の場合は正の数を、1の場合は負の数を表します。

8桁の2進数で言えば、00000000~01111111は8桁目が0なので正の数、10000000~11111111は8桁目が1なので負の数になります。

では、負の数「11011110」は10進数で言うと何になるのでしょうか?ここで出てくるのが補数です。「11011110」は「00100010」の2の補数になります。「00100010」=「34」なので、「11011110」=「-34」となります。

実際に「11011110」=「-34」になっているか下の式を例に検証してみます。

64-34=30

この計算式を、負数を2の補数で表現する2進表記法で表すと、下の式になります。

01000000+11011110=100011110
※64=01000000、-34=11011110

10進数の「30」を2進数で表すと「00011110」になり、これは上の計算で求めた「100011110」から最上位の1を抜いた結果と同じになります。

これで2の補数が、負数になることが分かってもらえたと思います。

基本情報技術者試験での出題例

サンプル問題問1

基本情報技術者
科目A サンプル問題問1

負数を2の補数で表すとき,8ビットの2進正数nに対し-nを求める式はどれか。ここで,+は加算を表し,ORはビットごとの論理和,XORはビットごとの排他的論理和を表す。

ア (n OR 10000000)+00000001

イ (n OR 11111110)+11111111

ウ (n XOR 10000000)+11111111

エ (n XOR 11111111)+00000001

平成30年度春期問1

基本情報技術者 午前試験
平成30年度春期問1

ある整数値を,負数を2の補数で表現する2進表記法で表すと最下位2ビットは”11″であった。10進表記法の下で,その整数値を4で割ったときの余りに関する記述として,適切なものはどれか。ここで,除算の商は,絶対値の小数点以下を切り捨てるものとする。

ア その整数値が正ならば3

イ その整数値が負ならば-3

ウ その整数値が負ならば3

エ その整数値の正負にかかわらず0

正解と解説

正解は”ア”

4桁の2進数を例にしてこの問題を考えてみましょう。

負数を2の補数で表現するので、0000~0111が正の数、1000~1111が負の数となります。

●ある整数値が正の場合
最下位2ビットが’11’なので、例えば’0011’や’0111’が当てはまりますね。’0011’は10進数で’3’、’0111’は10進数で’7’になり、それぞれを4で割ると余りは3になります。

●ある整数値が負の場合
最下位2ビットが’11’なので、例えば’1011’や’1111’が当てはまります。’1011’は’0101’の2の補数で、’1111’は’0001’の2の補数です。’0101’は10進数で’5’を、’0001’は10進数で’1’を表すので、’1011’は’-5’を、’1111’は’-1’を表します。

-5÷4=-1.25ですが、「商は絶対値の小数点以下を切り捨てる」と書いてあるので、商は-1となり、-5÷4=-1余り-1と表せます。同様にすると-1÷4=0余り-1となるので、ある整数値が負の場合は余りが-1になることが分かります。

以上のことから、
・整数値が正の場合、余りは3
・整数値が負の場合、余りは-1
となるので、答えはアです。