![]() |
Re: Umrechnen Bin-Dez / Dez-Bin ohne shr oder shl
hallo,
wollte dieses thema nochmal aufgreifen.. für mich ist delphi noch komplett neu, sprich genau diese aufgabe ist meine erste kleine funktion die ich schreiben soll... da ich aber nun nicht nur einfach das ergebnis haben möchte sondern auch gerne verstehen möchte was genau wo passiert wäre es klasse wenn mir das jemand von euch mal kurz erklären könnte :) |
Re: Umrechnen Bin-Dez / Dez-Bin ohne shr oder shl
Hallo Poldy, willkommen in der DP :dp: . Da das meiste bestimmt bereist erklärt wurde, zeige ich Dir nur ein Beispiel mit einer Zahl (hier 125), einer Vergleichszahl und einem Ergebnisstring:
Delphi-Quellcode:
StringVariable ist noch leer, Vergleichszahl ist 1
01111101 //zu untersuchende Zahl 00000001 //Vergleichszahl -------- 1 Stringvariable := '1' + Stringvariable;// -> Stringvariable = '1' Vergleichszahl := Vergleichszahl * 2; 01111101 //zu untersuchende Zahl 00000010 //Vergleichszahl -------- 0 Stringvariable := '0' + Stringvariable;// -> Stringvariable = '01' Vergleichszahl := Vergleichszahl * 2; 01111101 //zu untersuchende Zahl 00000100 //Vergleichszahl -------- 1 Stringvariable := '1' + Stringvariable;// -> Stringvariable = '101' Vergleichszahl := Vergleichszahl * 2; usw. |
Re: Umrechnen Bin-Dez / Dez-Bin ohne shr oder shl
danke für deine antwort aber um ehrlich zu sein versteh ich das mal so garnicht :(
also am sinnvollsten scheint mir folgende lösung zu sein function IntToBin(Value: Word): String; (wofür steht das word? ist das eine art string?) const (welche bedeutung hat const? ist damit eine constante gemeint?) BIN_VALUE: array[0..1] of Char = ('0', '1'); begin Result := ''; while Value > 1 do begin Result := BIN_VALUE[Value mod 2] + Result; Value := Value div 2; end; Result := BIN_VALUE[Value mod 2] + Result; end; mein problem hier bei ist, dass die sprache für mich halt komplet neu ist und ich lediglich ein wenig javakenntnisse habe... hilfreich wäre hierbei für mich wenn mir jemand zeile für zeile genau erklären würde was dort passiert.. ich weiss das da ein arraylist angelegt wird die mit char gefüllt ist und diese entweder 1 oder 0 sind.. anschliessend beginnt dann eine while schleife... diese verstehe ich nicht komplet lediglich das da der value nach einer prüfung durch 2 geteilt wird.. anschliessend wird dann das result ausgegeben.. wie genau sich das zusammensetzt versteh ich allerdings auch nicht... wenn mir da jemand noch ein wenig nachhilfe gben könnte wäre das wirklich sehr nett :) |
Re: Umrechnen Bin-Dez / Dez-Bin ohne shr oder shl
Lies Dir
![]() |
Re: Umrechnen Bin-Dez / Dez-Bin ohne shr oder shl
ok.. also das verstehe ich jetzt schon so im groben.. hatten die tage auch in der gruppe die sachen mit and or bzw xor besprochen allerdings verstehe ich da noch nicht den zusammenhang zu meiner aufgabe...
hierbei gehts darum das wir ein programm schreiben sollen das jede binärzhl in eine dualzahl umwandelt und dafür soll ich die methode schreiben... dabei ist es doch für mich nicht interessant ob ich and or bzw xor habe oder bin ich jetzt völlig auf dem falschen dampfer? |
Re: Umrechnen Bin-Dez / Dez-Bin ohne shr oder shl
Wie willst Du das denn herausfinden, ob ein Bit gesetzt ist? Du musst schon bitweise mit and vergleichen. So habe ich es oben gezeigt (vom niederwertigsten zum höchstwertigen Bit).
|
Re: Umrechnen Bin-Dez / Dez-Bin ohne shr oder shl
ah.. so langsam verstehe ich dich.. also zumindest den grundgedanken..:)
aber wie genau muss ich dann den quellcode schreiben um die binärzahl in eine dualzahl umzuwandeln? in dem tutorial hast du es ja allgemein gehalten... was ich dabei nicht verstehe ist dein setzen der constanten...also lesen =1... sorry bin wirklich blutiger anfänger und habe weder ein tolles dephibuch noch ein komplettes tutorial... mal abgesehen avon das ich leider nicht die zeit habe das komplett zu durchzuarbeiten... |
Re: Umrechnen Bin-Dez / Dez-Bin ohne shr oder shl
Zitat:
Du schreibst Dir am Besten eine Funktion dafür.
Delphi-Quellcode:
Diese erwartet eine ganze Zahl vom Typ Cardinal (32 Bit ohne Vorzeichen) und gibt einen String zurück. In dieser Funktion deklarierst Du die lokale Variable Vergleichszahl (auch Cardinal) und belegst diese mit 1 (für das niederwertigste Bit). Nun tust Du in einer Schleife Folgendes: binärer and-Vergleich von Zahl und Vergleichszahl. Kommt dabei Vergleichszahl heraus, ist das Bit gesetzt und an das Funktionsergebnis (Result) wird links '1' angefügt, ansonsten '0'. Anschließend muss Vergleichszahl verdoppelt werden für das nächsthöhere Bit. Du kannst die Schleife beenden, wenn z.B. die Länge von Result (das ja ein String ist) der Speichergröße der Eingangszahl multipliziert mit 8 (weil 1 Byte = 8 Bit) entspricht.
function ZahlAsBinaryString(Zahl: Cardinal): String;
|
Re: Umrechnen Bin-Dez / Dez-Bin ohne shr oder shl
ok.. nun bin ich wieder bei den bömischen dörfern.... was ist denn bitte ein cadinal? ;)
wie würde denn deine konkrete funktion zum umwandeln aussehen? |
Re: Umrechnen Bin-Dez / Dez-Bin ohne shr oder shl
Obwohl ich es eigentlich nicht tun wollte, hier mal die Umsetzung (normalerweise würde ich es kürzer machen, aber dann verstehst Du es bestimmt nicht):
Delphi-Quellcode:
function ZahlAsBinaryString(Zahl: Cardinal): String;
//Variable Vergleichszahl deklarieren var Vergleichszahl: Cardinal; begin //Vergleichszahl und Rückgabewert vorbelegen Vergleichszahl := 1; Result := ''; //Schleife (Ende, wenn das Ergebnis 32 Stellen hat) while Length(Result) < SizeOf(Cardinal) * 8 do begin //binärer Vergleich if (Zahl and Vergleichszahl) = Vergleichszahl then Result := '1' + Result else Result := '0' + Result; //Vergleichszahl verdoppeln Vergleichszahl := Vergleichszahl * 2; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:59 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