zamiana liczby dziesiętnej na binarną

Odpowiedz Nowy wątek
2003-11-09 21:51

Rejestracja: 16 lat temu

Ostatnio: 14 lat temu

0

Jestem początkujący i potrzebuje kod który pozwoli na zamiane liczby dziesiętnej na binarną i odwrotnie. Z góry dzięki!

Pozostało 580 znaków

2003-11-09 22:15

Rejestracja: 17 lat temu

Ostatnio: 10 miesięcy temu

Lokalizacja: Sosnowiec

0
function IntToBin(Int: int64): string;
var
  x, y: int64;
begin
  Result := '';
  x := Int;
  repeat
    y := x mod 2;
    x := x div 2;
    if y > 0 then
      Result := '1' + Result
    else
      Result := '0' + Result;
  until x = 0;
end;

function BinToInt64(Bin: string): int64;
var
  LengthBin, deleted, i, x: integer;
  arr: array of integer;
begin
  Result := 0;
  if Pos('1', Bin) > 0 then
  begin
    deleted := 0;
    LengthBin := Length(Bin);
    repeat
      x := Pos('1', Bin);
      deleted := deleted + x;
      SetLength(arr, Length(arr) + 1);
      arr[Length(arr) - 1] := LengthBin - deleted;
      Bin := Copy(Bin, x + 1, Length(Bin));
    until (Pos('1', Bin) = 0);

    for i := 0 to Length(arr) - 1 do
      Result := Result + PowerInt(2, arr[i]);
  end;
end;

function PowerInt(Base, Exponent: integer): integer;
var
  x, i: integer;
begin
  if Exponent = 0 then
    Result := 1
  else if Exponent = 1 then
    Result := Base
  else
  begin
    x := Base;
    for i := 1 to Exponent - 1 do
      Base := Base * x;
    Result := Base;
  end;
end;

Pozostało 580 znaków

2003-11-09 22:20

Rejestracja: 17 lat temu

Ostatnio: 1 rok temu

0

Ja bym to napisał troszkę optymalniej :)
Zamiast div i mod można użyć jednej procedury DivMod, ale w tym wypadku znacznie lepsze byłoby zastosowanie and/shr. Analogicznie w drugą stronę and/shl :)


Jest jeszcze jeden błąd :)
Unix is user friendly. It's just very particular about who it's friends are.

Pozostało 580 znaków

Anonim
2003-11-09 23:24
Anonim
0

Ja bym to napisał troszkę optymalniej :)
Zamiast div i mod można użyć jednej procedury DivMod, ale w tym wypadku znacznie lepsze byłoby zastosowanie and/shr. Analogicznie w drugą stronę and/shl :)

type str64=string[64]; {bo nie masz więcej bitów}

function int2binstr(int:int64):str64;
var b:boolean;
begin
  result:='';
  repeat
    b:=int=0; 
    result:=char(48+(int and 1))+result;
    int:=int shr 1;
  until b;
end;

To jedno

function binstr2int(bin:str64):int64;
var i:byte;
begin
  i:=byte(bin[0]);
  result:=0;
  while i>0 do
    if bin[i] in [#48,#49]
      then
        begin
          result:=(result shl 1)or byte(bin[i]=#49);
          dec(i);
        end
      else 
        begin
          result:=-i;
          break; {błąd w ciągu}
        end;
end;

To drugie

Akceptowalne?

Pozostało 580 znaków

2003-11-10 08:36

Rejestracja: 18 lat temu

Ostatnio: 3 lata temu

0

Ja moze jeszcze napisze ze kiedys Sheitar wrzucil na strone unit z przeliczeniami dec/hex/bin Jak poszukasz to znajdziesz :)


Pozostało 580 znaków

Odpowiedz

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