Raz jeszcze BinToDec - lepszy pomysł

0

Cześć, napisałem sobie funkcję BinToDec, ale wg mnie można napisać jakąś, która dużo mniej obciąży procesor, chociaż może jestem w tym momencie nadgorliwy, ale myślałem też o assemblerze, jednak moja wiedza ogranicza się w tej kwestii do zera ;)

Moja funkcja wygląda tak:

function BinToDec(Bin: string): integer;
var 
  i: integer;
  res: integer;
  exp: integer;
begin
  res:=0;
  exp:=0;

  for i:=length(bin) downto 1 do
  begin
    res:=res+StrToInt(bin[i])*Trunc(power(2, exp));
    exp:=exp+1;
  end;

  result:=res;  
end;

Da się coś z tym zrobić, żeby było mniej operacji?
A może właśnie assembler?

0
function BinToDec (Binary: string): cardinal;
var
  Exponent, Position: cardinal;
begin
  result:=0;
  Exponent:=1;
  for Position := Length(Binary) downto 1 do
  begin
    if Binary[Position] = '1' then
      result := result + Exponent;
    Exponent := Exponent shl 1;
  end;
end;
function BinToDec (Binary: string): cardinal;
var
  Position, Size: cardinal;
begin
  result:=0;
  Size := Length(Binary);
  for Position := Size downto 1 do
  begin
    if Binary[Position] = '1' then
      BinToDec := result + (1 shl (Size - Position));
  end;
end;

nie wiem które będzie szybsze

0

Wycięty z kol.pas

function Binary2Int( const Value: AnsiString ) : Integer;
var I: Integer;
begin
  Result := 0;
  for I := 1 to Length( Value ) do
  begin
    if Value[ I ] in [ '0'..'1' ] then
      Result := Result * 2 + Ord( Value[ I ] ) - Ord( '0' )
    else break;
  end;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1