![]() |
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: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 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