Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   umwandlung von dualzahlen zu dezimalzahlen (https://www.delphipraxis.net/72132-umwandlung-von-dualzahlen-zu-dezimalzahlen.html)

nullahnung 26. Jun 2006 09:22


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:

Mavarik 26. Jun 2006 09:28

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:

pszopp 26. Jun 2006 09:44

Re: umwandlung von dualzahlen zu dezimalzahlen
 
Wilkommen in der DP,

Ich gehe mal davon aus, dass die Dual-Zahl als String vorliegt:

Delphi-Quellcode:
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
Dieses kleine Code-Schnipsel durchläuft die Binäre Zahl von rechts nach links.
Wenn eine eins gefunden wird, wird das Ergebis um die passende Deziamlzahl erhöht.


Viele Grüße,
pszopp

TheAn00bis 26. Jun 2006 09:45

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:
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;
edit: Hehe, etwas zu spät. Lustig, wie ähnlich die Funktionen sind.
Pszopp, Power gibt einen extended-Typ zurück, du musst also noch "trunc" hinzufügen.

edit2: Auf Hinweis von Pszopp geändert. Danke. :)

Mavarik 26. Jun 2006 09:51

Re: umwandlung von dualzahlen zu dezimalzahlen
 
Viel einfacher!

Delphi-Quellcode:
  B := 0;
  For i:=1 to length(S) do
    begin
      B := B shl 1;
      if S[i] = '1' then
        B := B or 1;
    end;
Grüsse Frank :coder:

PS.: Sehe schon alles keine ASM programmierer hier! :zwinker:

pszopp 26. Jun 2006 09:53

Re: umwandlung von dualzahlen zu dezimalzahlen
 
Zitat:

Zitat von TheAn00bis
Pszopp, Power gibt einen extended-Typ zurück, du musst also noch "trunc" hinzufügen.

Hast Recht, schon korrigiert.
Dein Exponent in der Power-Funktion scheint falsch zu sein :spin:

TheAn00bis 26. Jun 2006 10:40

Re: umwandlung von dualzahlen zu dezimalzahlen
 
Zitat:

Zitat von pszopp
Dein Exponent in der Power-Funktion scheint falsch zu sein :spin:

Danke, geändert.

Zitat:

Zitat von Mavarik
Viel einfacher!

Delphi-Quellcode:
  B := 0;
  For i:=1 to length(S) do
    begin
      B := B shl 1;
      if S[i] = '1' then
        B := B or 1;
    end;

Das sieht interessant aus, aber verstehen tue ich es nicht. Würdest du das mal erklären?
Die Informationen der Hilfe über "shr" und "or" bringen mich nicht weiter.

morri 26. Jun 2006 11:01

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)

Mavarik 26. Jun 2006 11:09

Re: umwandlung von dualzahlen zu dezimalzahlen
 
Zitat:

Zitat von TheAn00bis
Das sieht interessant aus, aber verstehen tue ich es nicht. Würdest du das mal erklären?
Die Informationen der Hilfe über "shr" und "or" bringen mich nicht weiter.

Ganz einfach...

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:

Mavarik 26. Jun 2006 11:12

Re: umwandlung von dualzahlen zu dezimalzahlen
 
Zitat:

Zitat von morri
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)

Nööö

X := 3;

X := X or 1;

X = 3;

Frank :coder:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz