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