nochmal dezimal in binär - syntaxfragen
-
Krux schrieb:
int zahl while (zahl > 0){ cout << zahl%2; zahl /= 2; }Falschrum.
-
David_pb schrieb:
Krux schrieb:
int zahl while (zahl > 0){ cout << zahl%2; zahl /= 2; }Falschrum.
ja ist mir auch aufgefallen, aber das kann der selbst umdrehen hab ich mir da gedacht, anstatt nochmal alles selbst zu bearbeiten.
-
Ich kann mir nicht verkneifen, das ganze mal wieder als Einzeiler zu posten … praktischer Nutzen gleich null. ^^
std::string to_bin_str(unsigned int n) { return n ? to_bin_str(n / 2) + (n % 2 ? '1' : '0') : ""; }
-
Der rekursive Konrad wieder

Warst du eigentlich der, der mal nen Link zu einer Algo-Sammlung-Seite gepostet hatte und meinte man solle sich da paar aussuchen und die zu implementieren üben, wenn ja, kannst du nochmal den Link posten ?
-
Da, genauso Sinnfrei aber mit cast und dafür etwas schneller!

std::string to_binary( unsigned int n ) { return n ? to_binary( n >> 1 ) + char( '0' + ( n & 1 ) ) : ""; }
-
total sinnlos, aber sauschnell weil ohne std::string
void print_bits (unsigned v) { unsigned z = v>>1; if(z) print_bits (z); putchar ('0' + v-(z<<1)); }
-
Noch viel unsinniger aber dafür noch schneller!

void to_binary( unsigned int n ) { if ( n ) to_binary( n >> 1 ), putchar( '0' + ( n & 1 ) ); }
-
KasF schrieb:
Der rekursive Konrad wieder

Ich mag Rekursion.
Auch wenn ich sie in diesem Fall mangels Effizienz nie einsetzen würde.Warst du eigentlich der, der mal nen Link zu einer Algo-Sammlung-Seite gepostet hatte und meinte man solle sich da paar aussuchen und die zu implementieren üben, wenn ja, kannst du nochmal den Link posten ?
Kloar: http://www.nist.gov/dads/
David_pb schrieb:
Da, genauso Sinnfrei aber mit cast und dafür etwas schneller!

std::string to_binary( unsigned int n ) { return n ? to_binary( n >> 1 ) + char( '0' + ( n & 1 ) ) : ""; }Ich bin mir nicht sicher, ob das schneller ist. Ein guter Compiler macht aus 'n / 2' doch eh eine Shift-Operation. Ob die char-Addition schneller ist als eine Verschachtelung, müsste man mal testen.
-
Ja stimmt. Schwankt beir mir zwischen -4% und 6% Unterschied. Kommt also im Schnitt aufs gleiche raus. Aber ohne std::string ist die Differenz bis zu 99%.

-
David_pb schrieb:
Aber ohne std::string ist die Differenz bis zu 99%.

damit haben wir, mit sinnlosen codes, nachgewiesen, dass std::string mit vorsicht zu geniessen ist

-
pale dog schrieb:
David_pb schrieb:
Aber ohne std::string ist die Differenz bis zu 99%.

damit haben wir, mit sinnlosen codes, nachgewiesen, dass std::string mit vorsicht zu geniessen ist

Nöö, wir haben nachgewiesen, dass eine Konkatenation ohne passende Speicherallokationsstrategie ineffizienter als das Schreiben in einen gepufferten Zeichenstrom ist. Und das wussten wir ja auch davor schon.

-
wieso nennt ihr eure versionen sinnlos ?
für manche aufgabenstellungen macht das doch sinn, sich die binärdarstellung anzusehen ?
allerdings schneidet ihr die führenden nullen ab, die möchte man doch meist auch zwecks vergleiche sehen.
-
verstehe ich nicht schrieb:
wieso nennt ihr eure versionen sinnlos ?
Meine, weil sie (sinnlos) ineffizient ist. Die 'putchar'-Variante, weil sie eine verkorkste Schnittstelle hat (ich will keine Ausgabe. Ich will eine *Rück*gabe).
für manche aufgabenstellungen macht das doch sinn, sich die binärdarstellung anzusehen ?
Ja, dann kann man doch einfach die std::bitset-Klasse verwenden (oder sich eine sinnvolle Implementierung schreiben).
-