Entwickler-Ecke
Sonstiges (Delphi) - Umwandlung von Integer ins Binärsystem
Skywalker - Do 05.12.02 16:13
Titel: Umwandlung von Integer ins Binärsystem
Hi Leute,
hab mal wieder ne Frage.
Ist es möglich eine Integer-Zahl ins Binärsystem umzuwandeln?
D.h. Integer = 8 Binär = 00001000
Indeterminatus - Do 05.12.02 16:32
aber sicher doch!
ich nehme mal stark an du willst lediglich einen string, der den binär-wert enthält...
das funktioniert nach folgendem schema:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var i : Integer; k : Byte; s : String; begin s := ''; i := <die zahl die umgewandelt werden soll>; k := 0; while (i <> 0) do begin i := i / 2; k := i MOD 2; s := chr( k + '0' ) + s; end; writeln( s ); // s kann jetzt weiterverwendet werden... end. |
übernehme keine garantie für fehlerfreie funktion dieses quellcodes! er funktioniert nur unter der annahme, dass du POSITIVE integer-werte umwandeln willst, bei negativen müsstest du die noch auf positive mappen, will ich aber jetzt nicht ausführen, um nicht unnötig zu verwirren...
Delete - Do 05.12.02 17:57
| Indeterminatus hat folgendes geschrieben: |
| übernehme keine garantie für fehlerfreie funktion dieses quellcodes |
Garantie wird nachgereicht :wink::
verursacht "Imkompatible Typen 'Integer' und 'Extended'. Richtig wäre:
und nocheinmal "Imkompatible Typen" in der Zeile
Quelltext
1:
| s := chr( k + '0' ) + s; |
Richtig wäre:
Quelltext
1:
| s := chr(k + BYTE('0')) + s |
(anstelle von "BYTE" kann natürlich auch "ORD" benutzt werden)
Nun, und das "Umwandeln" von negativen Integer-Werten in positive ist mit
auch recht schnell und ohne Verwirrung erledigt.
Anonymous - Do 05.12.02 20:47
Hab mal selbst entwickelt. Weiss allerdings nicht mehr ob sie Fehlerfrei arbeitet oder nicht:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| // Konvertiert Dezimalzahl (z.B. 132) in BinString (z.B. '01101011') // Len gibt an wie lang der BIN-String sein soll (Auffüllung mit 0'en) function DecToBin(Dec, Len: Byte): String; begin while Dec > 0 do begin Result := IntToStr(Dec mod 2) + Result; Dec := Dec div 2; end; while Length(Result) < Len do Result := '0' + Result; end; |
Skywalker - Fr 06.12.02 09:07
Dank Eurer Hilfe läuft es jetzt wunderbar.
Delete - Fr 06.12.02 18:44
| MathiasSimmack hat folgendes geschrieben: |
Nun, und das "Umwandeln" von negativen Integer-Werten in positive ist mit
auch recht schnell und ohne Verwirrung erledigt. |
Das ist so aber nicht ganz richtig. Zwar funktioniert dann die FDunktion, aber man müßte sich erst mal einigen, wie man negative Zahlen binär darstellt: durch das Zweierkomplement oder sonst wie, dann spielt natürlcih noch dioe Darstellung der Breite eine Rolle. Man kann das höchste Bit als Vorzeichenbit nehmen 10000001b wäre -1d oder aber 129 je nach Definition.
Also ganz so trivial ist das mit den negativen Werten nicht. :wink:
Delete - Fr 06.12.02 21:40
Das ist sicher richtig. Ich habe mich aber nur auf die Aussage
| Zitat: |
| bei negativen müsstest du die noch auf positive mappen, will ich aber jetzt nicht ausführen, um nicht unnötig zu verwirren |
bezogen. Das hörte sich in meinen Ohren so an, als wären negative Werte nicht ... hm, sagen wir mal: gewünscht. Und ich glaube, wenn man nur positive Werte zulassen will, ist "abs" doch eigentlich sinnvoll.
Delete - Sa 07.12.02 03:55
Dann ja, aber auch nur dann. Ich wollte damit nur ausdrücken, dass man aucn negative Werte im Binärsystem darstellen kann.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!