a = 12345、b = 67 のとき、商は 184 で余りは 17 です。
皆さんは、算数で、手計算で、12345 から 67 を 184回引き算しますか?
誰でも次のように計算しますよね。
コード:
184
------
67)12345
67
---
564
536
----
285
268
---
17
67の倍数を右にずらすよりも、
12345を左にずらすほうがコードが簡単になります。
コード:
y a b x
00000 12345
00001 23450 <<
00001 23450 - 67 x 0
00012 34500 <<
00012 34500 - 67 x 0
00123 45000 <<
00056 45000 - 67 x 1
00564 50000 <<
00028 50000 - 67 x 8
00285 00000 <<
00017 00000 - 67 x 4
コンピュータの内部では 10進ではなく 2進ですが、
アルゴリズムは同じです。いや、倍数は不要で、
引ければ 1、引けなければ 0 なので、より簡単です。
ただ、y と a の 2つの変数をシフトするのは少し面倒です。
でも、a の最上位ビットを見て、それを yの最下位ビットに
挿入すればよいだけです。
#4 のプログラムはそうなっています。