Dezimalzahl als Binärzahl ausgeben



  • Hey Leute,

    Es geht darum eine Dezimalzahl als eine Folge von Binärziffern auszugeben. In der Theorie habe ich hierzu schon folgenden Code geschrieben:

    for(i=32;i>=0;i--)
    		{
    			printf("%d",(n & (int)pow(2,i)) ? 1 : 0);
    		}
    

    (Ja ich weiß, dass das natürlich Ressourcentechnisch nicht optimal gelöst ist, mit der pow Funktion, aber es geht nicht darum den Code Performancmäßig zu verbessern, sondern nur zu verstehen wo der Fehler ist)
    Die Ausgabe ist immer richtig, bis auf die erste Ziffer, dieist immer 1, egal welche dezimalzahl ich eingebe. Habe mir echt schon den Kopf darüber zerbrochen wieso das so ist, könnte mir irgendjemand helfen?

    Beispiel: ich gebe 40 als dezimal ein und bekomme 10000000000000000000000000101000
    😡 Bitte um Hilfe



  • 32...0 sind 33 Ziffern...



  • Ich finde meinen Originalpost jetzt nicht mehr weil die Suchfunktion zu wünschen übrig lässt, erinnere mich aber daran, daß sogar SeppJ von meiner Lösung erstaunt war:

    char line[100] = '\0';
    char ich = 30;
    int i;
    for( i = 0x80; i > 0; i >>= 1 )
    	strcat( line, (ich & i) == i ?  "1" : "0" );
    

    Musst du nur i anpassen.



  • Caligulaminus schrieb:

    32...0 sind 33 Ziffern...

    O ist keine Ziffer, O ist lediglich eine Krücke.



  • EOP schrieb:

    Caligulaminus schrieb:

    32...0 sind 33 Ziffern...

    O ist keine Ziffer, O ist lediglich eine Krücke.

    Wo ist da ein O?



  • oenone schrieb:

    EOP schrieb:

    Caligulaminus schrieb:

    32...0 sind 33 Ziffern...

    O ist keine Ziffer, O ist lediglich eine Krücke.

    Wo ist da ein O?

    Was für ein unglückliches Tastaturlayout, das O direkt unter der 0 zu plazieren. 🙂



  • Caligulaminus schrieb:

    32...0 sind 33 Ziffern...

    hmm verstehe ich nicht wirklich, auch wenn ich die Schleife ab 16 an runterzähle wird die erste Ziffer wie durch Magie zu einer 1
    😡



  • Hanser schrieb:

    Caligulaminus schrieb:

    32...0 sind 33 Ziffern...

    hmm verstehe ich nicht wirklich, auch wenn ich die Schleife ab 16 an runterzähle wird die erste Ziffer wie durch Magie zu einer 1
    😡

    Bitte poste den vollständigen Code.



  • Also das ist der vollständige code, das n ist halt ein Integer der die zu konvertierende Zahl enthält



  • Hans nochmal schrieb:

    Also das ist der vollständige code, das n ist halt ein Integer der die zu konvertierende Zahl enthält

    Du schreibst doch gerade, dass Du von 16 anfängst herunter zu zählen.
    Da ist gar keine 16 in Deinem Posting. Also ist das nicht der Code.



  • Hmm jetzt scheint es auch einwandfrei zu funktionieren, gestern sah das noch anders aus.
    Vermute mal, die Funktion pow und das anschließende casten führen zu einer Ungenauigkeit.
    Naja sorry fürs stören :grins:


Log in to reply