プロが教えるわが家の防犯対策術!

この問題のやり方を教えて下さい

「この問題のやり方を教えて下さい」の質問画像

質問者からの補足コメント

  • 左は、は、11001-10011で、右は、101001-1010です。問題文は2進法で表してくださいとありました

      補足日時:2017/11/20 14:55

A 回答 (3件)

引き算を「補数」で行う方法があります。



「5桁の数」+「その数の補数」= 1 00000 (つまり「5桁から桁あふれして6桁目に繰り上がる)

を利用すると
 「5桁の補数」= 1 00000 - 「5桁の数」
ということになり、「桁あふれした桁は無視する」という条件で「補数」=「負数」として扱えることになります。

従って
「ある数を引く」=「その数の補数を加える」
ということに置き換えられます。ただし「桁あふれしたものは無視する」という約束の上で、ということです。
コンピューターでは、扱う数の上限(たとえば 32ビット、64ビットなど)を越えてオーバーフローしたものは消えてしまう(最上位からの桁上りが消滅する)という「欠点」があるので、それを逆手にとってこのような裏技を使います。

これでやってみると

(1) 11001-10011
マイナスの付いた「10011」を
 ・1 と 0 を逆転 → 01100  ←これが通称「1の補数」
 ・1 を加える → 01101  ←これが通称「2の補数」
この「01101」が元の数「10011」の補数です。

 従って、「- 10011」の代わりに「+ 01101」を計算すれば
  11001 + 01101 = 1 00110
桁あふれした「6桁目」の「1」は無視して、答は「00110」つまり「110」です。

(2) 101001-1010
同様に、マイナスの付いた「1010」を「6桁の数:001010」(引かれる数を桁を合わせる)として
 ・1 と 0 を逆転 → 110101  ←これが通称「1の補数」
 ・1 を加える → 110110  ←これが通称「2の補数」
この「110110」が元の数「001010」の補数です。

 従って、「- 1010」の代わりに「+ 110110」を計算すれば
  101001 + 110110 = 1 011111
桁あふれした「7桁目」の「1」は無視して、答は「011111」つまり「11111」です。
    • good
    • 0

二進数の引き算は、次の4つです。


1-1=0、1-0=1、0-0=0、0-1=1 。
最後のが分り難いかもしれませんが、
二進数で 10-1=1、100-1=11 になる事から、理解できると思います。

勿論「補数」の足し算にすることも出来ますが、
分らなければ、10進数に直して計算すれば。
    • good
    • 0

補数を足すんじゃなかったっけ?


http://kccn.konan-u.ac.jp/information/cs/cyber03 …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!