無料体験

【高校情報Ⅰ】補数(2進法の負の数)|共通テスト完全攻略勉強法_117

  • 前回は、半加算器・全加算器の説明をしました。 半加算器とは、1bitの2進数の足し算を行う論理回路でできた装置のことです。 この半加算器を複数組み合わせることで2bit以上の計算が可能になりますが、この時に使う装置のことを、全加算器と言います。全加算器を繰り返し計算させることで、どんなに長い2進数の計算も行うことができるとお話ししましたね。
    では今回は、2進法における負の数の表現や、引き算の演算である「補数」について、詳しく解説していきます。

①足し算を使って引き算をする?

  • 補数は、2進法における負の数の表現や、引き算の演算において使われます。 前回、半加算器と全加算器の説明をしましたが、コンピュータは加算器と補数を使用することで、引き算を行います。
  • そんな面倒なことしないで、半減算器や全減算器作ればさぁ、全国のか弱いJK達が補数とか勉強しなくて済むんじゃね?というか俺って天才?
  • 誰でも思いつくようなことを、ドヤ顔でありがとうございます。 単純に半減算器や全減算器を作れば良いと誰もが思います。しかし、半加算器と全加算器で引き算を賄うことで、余計な装置を作らずにハードウェアの複雑さを減らして、効率を向上させることが可能となります。 話は少し変わりますが、日本人は一般的にぐらみん君のドヤ顔と同じくらい、暗算が得意と言われています。 これは、日本にはそろばんの文化があり、学校で毎日のように計算の宿題が出ていることなどからきていると考えられます。 昔、レジが無い八百屋や魚屋などでは、ざるなどにお金を入れて、お客からもらったお金を入れたり、お釣りを出していました。
    例えば、350円の商品に対して客が1000円札を出した場合、即座に暗算して650円をお釣りとして渡すことができます。 当たり前だと思いますが、欧米ではこのように即座に引き算を行うことができる人は実は少ないのです。 ですから欧米のスーパーなどでは、足し算を使ってお釣りを渡します。 これを「カウントアップ」とも呼びます。
    まず、購入金額からスタートし、顧客が支払った金額に到達するまでお釣りを加えていきます。 具体的な例を挙げてみましょう。

    ある商品の購入金額が$3.5で、お客が$10札を出してきたとします。
    この場合、お釣りは$6.5ですが、これを直接計算する代わりに以下のようにカウントアップ方法を使用します。
    1. まず、購入金額の$3.5からスタートします。
    2. 次に、50セント硬貨を加えて$4にします。
    3. 続いて、1ドル札を1枚加えて$5にします。
    4. 最後に、5ドル札を1枚加えて$10にします。

    結果的に$6.5のお釣りを渡していることには変わりませんが、この方法を使うことで、正確なお釣り額(50セント硬貨1枚、1ドル紙幣1枚、5ドル紙幣1枚)をお客に直接手渡しながら計算することができます。 これは、引き算が苦手な欧米人でも計算を簡単にし、計算ミスを防ぐ効果があります。 コンピュータでの引き算の原理はこのカウントアップと似ています。

②補数

  • では、具体的にコンピュータがどのようにして引き算を行っているのか説明します。
    例として、5-3の計算を行ってみましょう。
    分かりやすく言うと、コンピュータでは「5+(10-3)‐10」を計算します。
    なぜこんなややこしい方法をするのか説明しますね。
    まず(10-3)の箇所に注目してください。 答えは7ですよね。 つまり、「引く数にいくつ足すと10になるか?」を求めているのです。 このように「いくつ足すと基準の数(今回は10)になるか」という数字のことを「補数」と呼びます。
    10進数の場合の補数の一覧は動画を参照してください。
    つまり、5+(10-3)-10は、5+(3の補数)-10となります。
    よって、5+(3の補数)は5+7、=12となりますね。
    そして-10はどういうことかと言うと、-10と考えるのではなく、上位の桁を切り捨てると考えるのです。
    上位の桁である10の位を切り捨てると、1の位の2だけが残ります。
    結果的に足し算だけで5-3の計算ができましたよね?
  • ちょっと不思議・・・
  • では次に、コンピュータで2進数を用いた場合の、5-3の計算について説明します。詳しくは動画を参照してください。
    今回は、皆さんが理解しやすいよう最大4ビットとしましたが、この基準の数となるビット数を増やせば、もっと大きな値も計算できることがおわかりいただけるかと思います。
    さて、ぐらみん君、2進数の値と2の補数のリストを見て、何か関係性に気づきませんか? これ分かったら、さっきのどや顔返上で構いません。
  • ・・・ちーん。
  • やっぱり分からなかったですね。 2進数の値から、ある規則性を持った計算をすると、補数の値を簡単に求められます。 この法則により、コンピュータでは、否定の論理回路と全加算回路を用いて補数を求めているのです。 一見、我々にとっては、非常にややこしい計算をしているように思いますが、コンピュータはどんなに複雑な計算も正しくあっという間に計算できてしまいます。コンピュータにとってはこちらの方が効率が良いということになるのです。

③負の数を扱う

  • また、補数を使うことによって、コンピュータで負の数を扱うことが可能になります。 各補数の値は元の数の負の値となります。 一覧は動画を参照してください。 0は正でも負の数でも無いので、それに対する補数はありません。 また、こちらの場合、8の2進数である1000は先程の補数に直す計算を行っても1000となります。 では、8と-8どちらになるかと言うと、-8として扱うルールとなっています。 本来4ビットで表現できる数字は、10進数でいくつからいくつまででしょうか? 2進数では0000~1111となりますので、0~15までですよね。 しかし、補数を使って負の数を扱うことで、-8~7までの範囲となるのです。 つまり、本来、この0~15の範囲で扱っていた数を、負の数も表現するというルールを加えたことで、-8~7の範囲になったということです。
  • うーん、なるほど。
  • このように補数を使うことで、正の数だけでなく負の数も表現できるようになりましたが、その分、正の数を表現できる数が約半減するということもおさえておきましょう。

まとめ

  1. 補数は、2進法における負の数の表現や、引き算の演算において使われる。
  2. 「いくつ足すと基準の数になるか」という数字のことを補数と呼ぶ。
  3. 負の数も表現するというルールを加えると、正の数を表現できる数が約半減する。