Помощь - Поиск - Пользователи - Календарь
Полная версия: Побитовые операции
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
-Лена-
Умножить два положительных числа, не превышающие 16, каждый в двоичной системе. Можно пользоваться только побитовыми операциями.
klem4
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
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
Цитата
Но скорее всего от сложения _result-а тоже придется избавиться...


ага, тоже думал об этом.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.