Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Побитовые операции

Автор: -Лена- 9.03.2008 2:33

Умножить два положительных числа, не превышающие 16, каждый в двоичной системе. Можно пользоваться только побитовыми операциями.

Автор: klem4 9.03.2008 19:35

function Mult(a, b: Word): LongInt;
var
i, size: Byte;
_result: Integer;
begin
_result := 0;

size := sizeof(a) * 8;

for i := 0 to pred(size) do begin
if Word(Word(b shl (pred(size) - i)) shr pred(size)) = 1 then
inc(_result, a);
a := a shl 1;
end;

Mult := _result;
end;

Автор: volvo 9.03.2008 20:11

blink.gif

    if Word(Word(b shl (pred(size) - i)) shr pred(size)) = 1 then
{ очень просто заменяется на }
if b and (word(1) shl i) = (word(1) shl i) then

. Но скорее всего от сложения _result-а тоже придется избавиться...

Автор: klem4 9.03.2008 20:19

Цитата
Но скорее всего от сложения _result-а тоже придется избавиться...


ага, тоже думал об этом.