nochmal dezimal in binär - syntaxfragen



  • int zahl
    while (zahl > 0){
        cout << zahl%2;
        zahl /= 2;
    }
    


  • 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).



  • Konrad Rudolph schrieb:

    Kloar: http://www.nist.gov/dads/

    Danke.


Anmelden zum Antworten