Einzelnen Beitrag anzeigen

Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#12

AW: Konversion von dezimal zu binär

  Alt 1. Jun 2012, 01:29
Das ist aber kein fair play: Du machst Dir die Tatsache zunutze, dass die Dezimalzahl intern ohnehin schon als Binärzahl konvertiert vorliegt. Du konvertierst nicht die Dezimalzahl in eine Binärzahl, sondern liest die bereits vorhandenen Bits der Binärdarstellung aus. Ich glaube nicht, dass das im Sinne des Aufgabenstellers ist.

Trotzdem geht es natürlich auch ohne die Power Funktion, man muss dazu nur die Zahl wiederholt durch zwei dividieren und die aufeinanderfolgenden Divisionsreste zu einem Binärzahlenstring zusammenhängen.
Das ist aber eine merkwürdige Argumentation.
Alle Daten ob Strings, Integers, oder Extended-Werte sind letztendlich binäre Daten.
Wenn jemand sein Wissen darüber nutzt, um zu einer Lösung zu kommen, dann ist das nicht unfair sondern vernünftig.

Der TE hatte ja seine "number" als Extended deklariert.

Die unten stehende Funktion nutzt die binäre Darstellung im Extended-Wert um ohne weitere Umwege den Extended in einen Binärstring umzuwandeln.
Sie ist für Werte von 0 bis 2^64-1 ausgelegt.
Bei Werten außerhalb dieses Bereiches wird eine Exception ausgelöst.

Ich hab die Funktion "auf die schnelle" geschrieben und nicht wirklich voll ausgetestet. Bitte keine Schimpfe wenn da Bugs drin sind.
Delphi-Quellcode:
FUNCTION ExtendedToBin(const v:extended):string;
type
   TExt=packed record M:UInt64; E:word; end;
const
   Bias=$3FFF; Sign=$8000; MaxE=Bias+63;
   sErr='Fehler bei Umwandlung in Binärstring.';
var
   e:word; i:integer;
begin
   e:=TExt(v).E;
   if e>0 then begin
      if (e>=Sign) or (e<Bias) or (e>MaxE) then raise Exception.Create(sErr);
      dec(e,Bias);
      if (e<63) and (((UInt64(1) shl (63-e) - 1) and TExt(v).M)<>0) then
         raise Exception.Create(sErr);
   end;
   SetLength(result,e+1);
   for i:=1 to e+1 do
      result[i]:=Chr($30 or Ord(TExt(v).m and (UInt64(1) shl (64-i))<>0));
end;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....

Geändert von Amateurprofi ( 1. Jun 2012 um 03:42 Uhr)
  Mit Zitat antworten Zitat