Wie komm ich an die Bits ?
-
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