Привет, в математике полный лох, поэтому спрошу здесь -
нужен алгоритм целочисленного деления одной восьмибитной переменной на другую восьмибитную, используя только SHR/SHL и вычитание/сложение.
Чтото типа такого:
Var
a,b,b1,q,r : byte;
begin
a := 100;
b := 15;
b1 := b;
while b1 <= a do
begin
b1 := b1 shl 1;
end;
{b1 > a, b1 = b * (некоторая степень 2)}
q:=0;
r:=a;
{инвариант: q, r - частное и остаток при делении a на b1,
b1 = b * (некоторая степень 2)}
while b1 <> b do
begin
b1 := b1 shr 1 ; q := q shl 1;
{ a = b1 * q + r, 0 <= r, r < 2 * b1}
if r >= b1 then
begin
r := r - b1;
q := q + 1;
end;
end;
write(q,' ',r);
readln;
end.
Но как видно, тут получаем переполнение при операции shl если делимое больше 127 и, соответственно, уход в зацикливание. Нужно как-то извратится, и не получать переполнение. Чтобы можно было поделить скажем 250 на 230 и тд.
PS: Для любителей деления в столбик и им сочувствующих в танках - использовать операцию деления и умножения НЕЛЬЗЯ.