![]() |
umwandlung von dualzahlen zu dezimalzahlen
wir sitzen schon länger an einem projekt wo wir dualz. in dezimalz. umwandeln sollen und wir haben keine ahnung wie das geht :shock: vielleicht hat jemand eine ahnung wie das geht? :coder2:
es wäre schön wenn wir so schnell wie möglich hilfe bekommen.unser lehrer hat das nicht richtig erklärt und wir sollen das jetzt alleine machen denn er ist krank :kotz: |
Re: umwandlung von dualzahlen zu dezimalzahlen
Hi!
Villeicht habe ich in der Schule nicht aufgepasst?! :gruebel: Was sind Dualz. 01010001 ??? Binär???? :drunken: Frank :coder: |
Re: umwandlung von dualzahlen zu dezimalzahlen
Wilkommen in der DP,
Ich gehe mal davon aus, dass die Dual-Zahl als String vorliegt:
Delphi-Quellcode:
Dieses kleine Code-Schnipsel durchläuft die Binäre Zahl von rechts nach links.
uses Math
... function BinToInt(const BinStr : String) : Integer; var lk : Integer; begin Result := 0; for lk := length(BinStr) downto 1 do begin if (BinStr[lk] = '1') then Result := Result + Round(Power(2, (length(BinStr) - lk))); end; // for lk end; // BinToInt Wenn eine eins gefunden wird, wird das Ergebis um die passende Deziamlzahl erhöht. Viele Grüße, pszopp |
Re: umwandlung von dualzahlen zu dezimalzahlen
Ja, Dualzahlen sind Binärzahlen.
Die Umwandlung ist eigentlich ganz einfach. Die erste Stelle von rechts steht für 2^0, die nächste für 2^1, dann für 2^2 usw. Daher musst du nur überprüfen, ob an dieser Stelle eine 1 steht oder eine 0, dementsprechend addierst du das 2^x zum bereits errechneten. Ich hab einfach mal eine kleine Funktion geschrieben, die das (glaube ich) richtig macht:
Delphi-Quellcode:
edit: Hehe, etwas zu spät. Lustig, wie ähnlich die Funktionen sind.
function DualnachDez(pDualZahl: String): Integer;
var i: integer; begin result := 0; for i:=length(pDualZahl) downto 1 do if pDualZahl[i] = '1' then result:=result+trunc(Power(2,length(pDualZahl)-i)); end; Pszopp, Power gibt einen extended-Typ zurück, du musst also noch "trunc" hinzufügen. edit2: Auf Hinweis von Pszopp geändert. Danke. :) |
Re: umwandlung von dualzahlen zu dezimalzahlen
Viel einfacher!
Delphi-Quellcode:
Grüsse Frank :coder:
B := 0;
For i:=1 to length(S) do begin B := B shl 1; if S[i] = '1' then B := B or 1; end; PS.: Sehe schon alles keine ASM programmierer hier! :zwinker: |
Re: umwandlung von dualzahlen zu dezimalzahlen
Zitat:
Dein Exponent in der Power-Funktion scheint falsch zu sein :spin: |
Re: umwandlung von dualzahlen zu dezimalzahlen
Zitat:
Zitat:
Die Informationen der Hilfe über "shr" und "or" bringen mich nicht weiter. |
Re: umwandlung von dualzahlen zu dezimalzahlen
shl und shr und or bearbeiten eine integerzahl bitweise.
or fügt also beispielsweise der dez. zahl 3 (=11) ein einser bit hinzu. also: 111 (=dez. 7) |
Re: umwandlung von dualzahlen zu dezimalzahlen
Zitat:
Ein shl !!! nicht shr!!! Ein shl ist ein binäres schieben der Bits nach links ohne CarryFlag und ohne Übertrag ins 0-te bit... und bewirkt ein MUL 2. Ein or 1 setzt einfach das 0-te bit auf 1. Somit wird, wenn im String eine 1 ist das Bit gesetzt und vor dem nächsten setzen nach links geschoben... ggf. Müsste abgeprüft werden ob der String nicht länger als 8 für bytes bzw. 16 für Words... Je nach Datentyp... Ich würde sagen schneller geht es nicht... kein Trunc kein Powser ... Grüsse Frank :coder: |
Re: umwandlung von dualzahlen zu dezimalzahlen
Zitat:
X := 3; X := X or 1; X = 3; Frank :coder: |
Re: umwandlung von dualzahlen zu dezimalzahlen
ja ok.
war jetzt eher auf das Beispiel bezogen. Da stand noch ein shl davor! Sorry. Ohne macht es bei 3 kein sinn. |
Re: umwandlung von dualzahlen zu dezimalzahlen
Zitat:
Frank |
Re: umwandlung von dualzahlen zu dezimalzahlen
Hallo allerseits,
ich wollte nur mal darauf aufmerksam machen, dass nullahnung folgendes Problem haben: Zitat:
Wenn ich das richtig sehe, müssen die nullahnungs z.B. aus der Dualzahl String "100110101" den String mit der entsprechenden Dezimalzahl "309" erzeugen. Ich denke mal, dass die Benutzung der Delphi Funktion zur Ausgabe einer Variable wohl nicht als Lösung im Sinne der gestellten Aufgabe gelten dürfte , oder ? |
Re: umwandlung von dualzahlen zu dezimalzahlen
Danke, Mavarik! Ist eigentlich wirklich genial, man bearbeitet den Integer praktisch einfach auf Dual-Ebene. Ist nicht nur die schnellste Variante sondern - einmal verstanden - auch die logischste.
@bit4bit: Ich sehe das Problem nicht, aber wenn Nullahnung seine Frage als nicht beantwortet sieht wird er bestimmt noch einmal nachfragen. :) |
Re: umwandlung von dualzahlen zu dezimalzahlen
hey danke für die vielen antworten und tipps werde versuchen diese schon mal umzusetzten hoffe ich komme weiter. :-D
|
Re: umwandlung von dualzahlen zu dezimalzahlen
Zitat:
Wenn ich wirklich eine function bauen will ist das doch jetzt auch kein Problem mehr. Einfach den Quelltext in eine Function einbauen und das ergebnis zurückgeben :gruebel: |
DP-Maintenance
Dieses Thema wurde von "sakura" von "Projekte" nach "Sonstige Fragen zu Delphi" verschoben.
Ist ja kein Projekt im Sinne der DP-Sparte ;) |
Re: umwandlung von dualzahlen zu dezimalzahlen
@ morri
Also die Fragestellung Zitat:
Eine Dualzahl besteht aus einer Reihe von Ziffern die "0" oder "1" sein können. Eine Dezimalzahl besteht aus einer Reihe von Ziffern die "0" bis "9" sein können. Alle bisherigen Lösungen erzeugen aus einem String von Nullen und Einsen den Wert dieser Dualzahl, der entweder in einer Floating Point oder in einer Integer Variable abgespeichert wird. Der Wert einer Zahl ist weder dual noch dezimal, es ist einfach ein Wert. Die interne Darstellung eines Wertes in einer Integer oder Floating Point Variablen benutzt eine Reihe von Bits, die jeweils zwei verschieden Zustände annehmen können. Diese beiden möglichen Zustände repräsentieren die Nullen bzw. Einsen einer Dualzahl. Um jetzt den Wert einer Variablen als Dezimalzahl zu erhalten, muss also ein String von Ziffern zwischen "0" und "9" erzeugt werden. Mit den Funktionen IntToStr und FloatToStr lässt sich ein Wert in einen String umwandeln, der eine Dezimalzahl darstellt. Die Aufgabe lautet IMHO aber, diese Umwandlung in einen solchen String durchzuführen ohne die Funktionen IntToStr und FloatToStr zu benutzen. Kann natürlich nur der Lehrer von Nullahnung entscheiden ... |
Re: umwandlung von dualzahlen zu dezimalzahlen
Wohl eher nicht.... :warn:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz