重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

[2進数 シフト演算 除算について]

シフト演算について勉強中です。ご協力お願い出来たら幸いです。

乗算について例えば『1010』(符号ビットを考えず)を2倍 4倍 8倍(2のn乗)した場合
ビットを2倍であれば1つ、4倍であれば2つ・・・左に
シフトすれば良いというのは理解しました。
また3倍 5倍などのケースも、
3倍であれば1ケタ左にシフトした数+1010で求まる事も理解しました。

問題は除算です。他の質問を探ってみたのですが、考え方は一緒という回答で・・・詰まっています

除算は右シフトとの事ですが
先ほどの例である『1010』(10)ですがこれを1/2、つまり2で割ると
1つ右にシフトし1010→0101 となり
1010を1/4する場合右に2ビットシフトし
1010→0010.10 となり理解は出来ます。

しかし1/3 、1/5といった場合の計算の仕方が分かりません。
余りを出さないという考えで(近似値になると思いますが)
解き方をご教授願えたらと思います。

A 回答 (2件)

単に10進の割り算と同じように積み算による割り算、つまり除数を引いて、引けたら商のビットに1を立て、引けなければ0を立て、除数を右シフトして、同じことを繰り返せば良いです。



2進の割り算は図のようになります。
「[2進数 シフト演算 除算について]」の回答画像2
    • good
    • 0

除数が2の倍数でない除算は筆算と同様のことをシフト演算を使用して実現します。


結果、演算処理にビット数分の時間がかかります。

FPGA等の回路用の説明ですが、こちらが参考になるでしょう。
http://www.cqpub.co.jp/hanbai/books/36/36171/361 …
    • good
    • 0

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