• 締切済み

2進数の計算について

次の計算について教えてください。(答えは8ビット2進数でお願いします) (1)00010110×00000110 (2)11101011÷00111011 よろしくお願いします。

みんなの回答

  • Tann3
  • ベストアンサー率51% (708/1381)
回答No.2

 少し詳しく説明してみます。  掛け算は左シフトで計算できます。 (1)は、第2項(割る数)が「110」ですから、第1項(割られる数)を「左に2桁シフト」したものと「左に1桁シフト」したものの「加算」です。  つまり、「N * 110 = (N * 100) + (N * 010)」と考え、「*100」は「左に2桁シフト」、「*10」は「左に1桁シフト」すればよいのです。従って、   「0101 1000」+「0010 1100」=「1000 0100」  割り算は、ちょっと厄介です。  第2項(割る数)を、何桁左にシフトすると「引いて第1項(割られる数)の最高桁の1をなくせるか」を考え、このシフトした数を第1項から差し引きます。(差し引いた結果は正数であること)  これを、適当な桁まで計算して残りを「余り」にするか、余りがなくなるまで繰り返します。  シフトした桁数の桁を「1」、シフトしても差し引きできない桁数を「0」としたものが、割り算の商になります。縦書きの筆算をする原理、上記の「掛け算」の逆をやっているということです。 (2)でやってみましょう。  第1項が「1110 1011」、第2項が「11 1011」なので、左に2桁シフトしたいところですが、そうすると結果がマイナスになってしまいますので、引き算できるためには左に1桁しかシフトできません。  そうすると、差し引きすると、    「1110 1011」-「111 0110」=「0111 0101」  今度は「0桁シフト」した第2項が引けるので、    「0111 0101」-「11 1011」=「0011 1010」  小数点以下まで計算すると、右に1桁シフトした「1 1101.1」を差し引いて、    「0011 1010」-「1 1101.1」=「1 1100.1」  次の右に2桁シフトした「1110.11」を差し引いて    「1 1100.1」-「1110.11」=「1101.11」  さらに右に3桁シフトした「111.011」を差し引いて    「1101.11」-「111.011」=「110.011」  と、まだまだ続きます・・・。  ということで、「左に1桁シフト(=2^1)」「0桁シフト(=2^0)」「右に1桁シフト(=2^[-1])」「右に2桁シフト(=2^[-2])」「3桁シフト(=2^[-3])」・・・と続くので、答は   「11.111・・・」 ということになります。「シフトしても差し引けない」桁があれば、その桁が「0」になるのですが、今回の計算ではできてきませんでした。「左に2桁以上(=2^2以上)」がないので、2^2以上の桁が「0」ということです。  2進8桁までで書けば「0000 0011.111・・・」ということです。  答は「8ビット2進数」ということなので、   「0000 0011 余り 0011 1010」 となります。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

1000100 11

関連するQ&A