- 締切済み
2進数の計算について
次の計算について教えてください。(答えは8ビット2進数でお願いします) (1)00010110×00000110 (2)11101011÷00111011 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Tann3
- ベストアンサー率51% (708/1381)
少し詳しく説明してみます。 掛け算は左シフトで計算できます。 (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)
1000100 11