テクノロジ編

【基本情報】負数を2の補数で表現する、について分かりやすく解説!

基本情報の勉強を進める上で、こんな悩みを抱いたことはありませんか?

  • 2の補数ってそもそもなに?
  • 負数を2の補数で表現するとどうなるの?
お茶ん太
お茶ん太

この記事では、ITの知識が無い人でも、
2の補数がなにか分かる!
補数がどう使われるかが分かる!
負数を2の補数で表現する、というのが意味か分かる!
ようになり、基本情報の2の補数の問題なら解ける!が出来るようにします!

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

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

補数を使うと足し算で引き算が出来る

なぜ補数なんて求める必要があるのでしょうか?
それは、補数を使えば足し算で引き算ができるからです
意味が分かりませんね。どういうことか見ていきましょう。

321-44=277」という計算を例に考えてみます。
補数を使う計算では、計算に使われる数字の中で最大の桁数の数字より更に1つ上の桁数の数字のうち、最小の数字をベースの数字とします。今回の例では「1000」がベースの数字になります。

次に今回の計算で引く数として使われている「44」に対して、ベースの数字「1000」を基準に補数を考えます。これは「956」ですね。なぜなら1000-44=956だからです。
では、補数を使って上の計算式を足し算で表現してみましょう。

補数を使った計算では答えが「1277」になりました。
ここから最上位の1を省くと「277」となり元の計算式と同じ答えになります。

元の計算式は引き算でしたが、引き算をすることなく、足し算で答えが導けました。
つまり、補数を使いこなせば、加算器だけで引き算も出来るようになるんです!
これが補数を勉強する意味なんですね。

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

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

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の補数です。

負数を2の補数で表す

コンピュータは0と1だけで全ての情報を制御します。
なので、負の数(負数)も0と1で制御しないといけません。
「-1001」なんて数字は扱えないんですね。

じゃあ、どうすれば負数を表現できるでしょうか?
最上位が0の場合は正数、1の場合は負数とすれば良いんですね
これが負数を2の補数で表す」ということです。

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

本当に「11011110」=「-34」で良いのか、「64-34=30」を例に検証します。
この計算式を、負数を2の補数で表現する2進表記法で表すと、こうなります。

「64」は「01000000」、「-34」は「11011110」で
この2つを足すと「100011110」になり、最上位の1を抜いた「00011110」が答えになります。「00011110」は「30」なので、ちゃんと計算できていることが分かりますね。

基本情報、出るところだけまとめ!

2の補数

2の補数を求めたければ、0と1を反転して、+1をする。

負数を2の補数で表現するとき、最上位が0なら正数、1なら負数になる。

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

サンプル問題問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
となるので、答えはアです。