dポイントプレゼントキャンペーン実施中!

とあるコンピューターシステムのアルゴリズムにおいて整数除算という
項目が出てきました。

(L+M)/2=M という式です。”/は整数除算を表す”

(LとMはカウンターで1LOOP毎にあがっていくものです。)

仮にL=1、M=10の場合は”11割る2”で応え5余り1と考えていいのでしょうか?
仮にL=2、L=3の場合の考え方も教えてください。

※添付画像が削除されました。

A 回答 (2件)

例えば、123000を10で割る時、真面目に計算しませんよね。

誰でも
「右端の0を取る」つまり、桁を右にシフトしますね。
コンピュータの内部形式は2進法です。だから、「2で割る」とは
桁を右に1桁シフトすることと同じです。
今はCPUが速いので、問題になりませんが、ずっと以前は割り算は
シフトの200倍近い時間を必要とする遅い命令でした。
つまり、「2で割る」を実際の割り算を使ってやるヤツは「間抜け」
ということを意味したのです。また、機械語の除算命令は剰余も
同時に求まります。これを別々に求めるコーディングを見ると
逆上したものです。例:int a = m / 2; int b = m % 2;
閑話休題
「2で割る」は右へ1回シフトするので、余りは切り捨てられる右端の
1桁の値です。つまり、0x01との論理積で求められるのです。
掲題の件は2進法における割り算の考え方を示唆しているのでは
ないでしょうか。
尚、更に昔は乗算、除算という命令もありませんでした。

この回答への補足

ご返事ありがとうごあざいます。
問題をまるっと後で問題をまるっと書いてみますので、ご指導お願いします。

補足日時:2009/03/26 08:19
    • good
    • 0
この回答へのお礼

すいません、画像が貼れなくなってしまったので一度クローズして再度質問いたします。

お礼日時:2009/03/26 14:10

普通整数除算と言えば、割る数も割られる数も割った結果もすべて整数という意味だと思うが。

つまり余りは一切考えない。

例:
6/2 = 3
12/5 = 2 ※2.4じゃない

というか、(L+M)/2=Mじゃ式として意味をなさないわけだが。
 代入文 M := (L+M)/2
もしくは
 比較文 (L+M)/2 == M
なんだろうけど、前者なら左右逆にすると全く意味が違うし、後者なら(L==M)OR(L==M+1)と同値。

どっちにしても、LもMもループ毎にインクリメントするのであれば不毛な計算に見える。
ただの例として挙げられていてそもそもあまり意味がないのか、
それとも何かメモリの制限された環境でも想定しているのか。。。
まぁ、本題には関係ないか。

# あと、なぜに全角。見た目的に気になってせうがない。

この回答への補足

ご返事ありがとうごあざいます。
説明が下手ですいません、問題をまるっと後で問題をまるっと書いてみますので、ご指導お願いします。

補足日時:2009/03/26 08:12
    • good
    • 0
この回答へのお礼

すいません、画像が貼れなくなってしまったので一度クローズして再度質問いたします。

お礼日時:2009/03/26 14:11

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