Wie komm ich an die Bits ?
-
Ich frage mich nur was ihr gegen die Funktion itoa und ihre anderen Implementierungen habt. Wenn ich nur die Binärwerte eines Zeichens WORDs oder Doppelworts haben möchte schreibe ich doch nicht alles Neu, oder ?
Joe
-
JoeIntel schrieb:
Ich frage mich nur was ihr gegen die Funktion itoa und ihre anderen Implementierungen habt.
Hamma ned, wieso?
-junix
-
junix schrieb:
JoeIntel schrieb:
Ich frage mich nur was ihr gegen die Funktion itoa und ihre anderen Implementierungen habt.
Hamma ned, wieso?
-junix
Ach das war C++ Code was hier bis jetzt abgeliefert wurde , also bis auf cin war das nicht wirklich zu erkennen. Es gibt aber auch klassen die so etwas implementieren wenn ich mich nicht irre und die greifen dann auch auf itoa zu. Man ist nur ein bisschen elitärer als wenn mans gleich benutzt.
Joe
-
Ich wüsste nicht, wo mir bei der Lösung des gestellten Problem itoa eine einfachere lösung sein sollte als die AND-Verknpüfung? Ich lass mir aber gern die Augen öffnen, wenn du was im Petto hast, lass und doch bitte Teilhaben...
-junix
-
junix schrieb:
Ich wüsste nicht, wo mir bei der Lösung des gestellten Problem itoa eine einfachere lösung sein sollte als die AND-Verknpüfung? Ich lass mir aber gern die Augen öffnen, wenn du was im Petto hast, lass und doch bitte Teilhaben...
-junix
nun ja ich für meinen Teil denek das es einige Vorteile dieser Funktion gibt. Die Frage war es doch wie bekomme ich die Bits ausgegeben und nicht wie schreibe ich eine tolle Funktion um die Bits auszugeben. Dies mach itoa perfekt und ausserdem für grössere eiheiten als Byte ich kann mir also vielleicht einige Schleifen sparen. Zweites vermeide ich Fehlerquellen wenn ich Funktionen aus Standardbibliotheken verwenden und kann davon ausgehen das diese auch optimiert sind. Wir sehen ja alle wie viele Fehler sich in diesem kurzen Stück Code einschleichen können und wie viele ansätze es gibt. Und drittens und nicht zu leztzt ist es kürzer einfacher und einfacher zu handhaben bzw. zu lesen.
Dies alles sagt nichts über die Qualität eures Codes aus und ich will mir auch nicht erlauben ihn zu kritisieren aber es ist schon etwas länger als itoa(byte,ziel,2); oder von mir aus auch QString:arg(byte,0,2) ?
Joe
-
itoa ist leider nicht in der Standardbibliothek.
-
Erschwerend kommt dazu, dass itoa ca. 6 mal langsamer ist als die oben vorgestellte variante.(hab mal ne Kurze Messung gemacht)
-junix
-
und außerdem kann man "meine" Variante genausogut auch für 16-Bit und 32-Bit benutzen.... Dazu brauche ich auch nur eine Schleife und nicht mehr...
-
Wie schon gesagt ich bekrittele hier nicht den Code aber es gibt halt eine Funktion die es macht und zwar mit einem einzigen Aufruf. Das diese Funtkion langsamer ist ist mir jetzt auch klar da sie ja für alle Basen gilt (war ein kurzschluss). Trotzdem bleibe ich dabei lieber eine Funktion aus einer Bibliothek als tausend mal den selben Code schreiben. Soweit ich weiss gibt es auch in der c++ stdlib funktionen die dies machen. Also brauchen wir uns hier nicht um itoa rumsteiten. Ich wollte nur darauf hinweisen das man nicht immer alles neu schreiben muss und optimieren kann man fast alles immer noch wahrscheinlich auch deinen kurzen Code.
Joe
-
junix schrieb:
MaSTaH schrieb:
junix schrieb:
MaSTaH schrieb:
Nö, ist doch im Prinzip richtig
Wieso beschleicht mich nur das Gefühl, dass die Pre-Increments bei den beiden For was mit dem merkwürdigen Verhalten zu Tun haben?
Ist doch Jacke wie Hose ob ich in diesem Fall bei BuiltIns ein pre increment oder ein post increment mache (C++ FAQ).
The for statement: for(for-init-statement; conditionopt ; expressionopt) { statement } is equivalent to: { for-init-statement while(condition) { statement expression } }
Hmmm stimmt, hatte mich da vertan.
-junix
Postet da nicht irgendwer immer den "Wie zitiere ich richtig im Usenet?"-Link? :p
-
Naja ist ein Tradeoff, wenn man die Geschwindigkeit braucht, lohnts sich, das so zu schreiben. Kannst es ja in eine eigene Funktion kapseln. Das Problem bei itoa und ähnlichen Funktionen ist, dass sie universeller sind (ich kann eine beliebige Basis angeben zwischen 2 und 10). Das kostet schon vom Prinzip her mehr Zeit, weil ich jedesmal noch feststellen muss, welche Basis überhaupt gebraucht wurde.
Den code brauchst du daher auch nicht dauernd neu zu schreiben. Ichhab mir hier selber auch schon eine nette kliene Sammlung an Funktionen aufgebaut, welche mir das Leben erleichtern (int2hex, hex2int, hex2bin, bin2hex zum Beispiel) welche ich eigentlich auch hätte mit StringStreams lösen können. War aber zum Schluss langsamer undich brauchte die Geschwindigkeit (über 1 MBit mal husch bin2hex zu wandeln auch auf älteren Notebooks macht einem zum Glück wieder etwas sensibler in der Programmierung)
Aber grundsätzlich hast du recht. Es ist immer ein Abwägen. Programmieren ist != codieren. programmieren bedeutet auch Abschätzen, was sich lohnt und was nicht. Da hier die Konvertierung von binär nach Binärstring die Hauptaufgabe ist, macht es durchaus sinn, etwas Zeit auf die Optimierung zu verwenden. Zumal diese Funktion auch mehrere tausend Mal aufgerufen werden könnte.
-junix
-
@JoeIntel: sagt ja niemand, daß man diese Sache zig mal codieren muß. Kann man genausogut in eine Funktion oder Methode packen und dann hab ich auch nur noch einen Aufruf. Außerdem hast Du nicht ganz unrecht: Du kommst zum gleichen Ziel mit weniger Aufwand. Aber manchmal ist es doch auch ganz praktisch, wenn man sich über bestimmte Dinge den Kopf zerbricht und mal selber was coded, was es schon gibt? Dabei lernt man nämlich etwas dazu und wenn man - wie in dem Fall -durch die spezielle Behandlung einer Problemstellung noch dazu deutlich schneller ist, dann ist das doch auch ne feine Sache oder?
Muß aber natürlich nicht jedermanns Sache sein.
[AtzeZitat]Ja ne, is klar[/AtzeZitat]
-
na, da sind wir uns ja einig.
-
Nochmal zum eigentlichen Thema: Wenn's nicht unbedingt superflott sein muss geht auch das hier...
#include <bitset> #include <iostream> using namespace std; int main() { unsigned char c = 125; bitset<8> bs(c); for(int i = 0 ; i < 8 ; ++i) cout << (bs[i] ? "1" : "0"); }
-
Welche Rolle spielt die Performance bei einem solchen Programm ?
Gar keine.
Das Programm dient doch mehr zur Übung oder welchen Sinn sollte das Programm sonst machen ?
-
_Stefan schrieb:
Welche Rolle spielt die Performance bei einem solchen Programm ?
Gerade weils eine Übung ist, sollte man etwas mit den unterschiedlichen Variationen spielen um ein Gefühl dafür zu bekommen. Und grad weils eine Übung ist, bringen wir hier einige Dinge zur Sprache die vielleicht im Moment nicht aber dafür später an Bedeutung gewinnen können.
-junix