C Binärcode in array einlesen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • C Binärcode in array einlesen

    Hallo.

    Ich versuche einen Code zu schreiben, der eine Dezimalzahl in Binärcode umwandelt und diesen in einen Array einliest.
    Allerdings scheinen ich einen Fehler in der Schleife zu haben, da bei der Ausgabe durch printf nie der richtige Binärcode rauskommt.

    Mir ist bewusst, dass es durch Modulo wohl leichter ginge, aber ich möchte bewusst den folgenden Weg anwenden.
    Wäre jemand vielleicht so nett und kann bzlg. eines Fehler drüber schauen? :D

    #include <stdio.h>


    int main()
    {

    int a;
    int b;
    int sum;
    int i;
    int zwischensumme;
    int binary;
    int bin[10];
    int count;

    printf("Geben Sie die erste Zahl ein: ");
    scanf("%d",&a);
    printf("\nGeben Sie die zweite Zahl ein: ");
    scanf("%d",&b),
    sum = a + b;
    zwischensumme = sum;
    printf("\n\nSumme: %d\n",sum);



    for(count=1024, i = 1; count>=1; )
    {
    if ((zwischensumme-count)>0)
    {

    bin[i] = 1;
    zwischensumme = zwischensumme - count;
    count=count/2;
    i = i + 1;

    }
    else
    {
    bin[i] = 0;
    count=count/2;
    i = i + 1;
    }
    }
    [/i][/i]

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von gm12345 ()

  • Grundsätzlich hast Du zwei-drei Fehler drin:

    1) Ein C-Array beginnt immer bei 0. Dein erstes Element ist also i[0] und nicht i[1];
    2) Überlege mal genau wenn du z.B. 1024 also Zwischensumme hast, welches Bit du als erstes bekommen würdest? Sicherlich nicht das Bit 0 sondern wohl eher das Bit 10. Wenn Du also count von 1024 runter zählst, dann must du das natürlich auch in der reihenfolge in die Bit-Array füllen. Weiterhin hast du gar keinen Platz in Deinem Array für bit 10 da es nur nur 10 bit groß ist und Du folglich auch nur bit 0 bis 9 speichern kannst.
    3) Ein weiteres großes Problem ist, das Dein Programm bei einer Tahl größer 1023 nicht mehr funktionieren wird da Du ja maximal 10 Bit annimmst. Also solltest du entweder 64 Bit nehmen oder abfragen ob die Zahl größer 1023 ist und dann eine Fehlermeldung ausgeben statt zu berechnen.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • matz schrieb:

    beage schrieb:

    Wieso inkrementierst Du i innerhalb der for-Schleife und nicht in den Klammern?



    Wird er vermutlich irgendwo so gelesen / gelernt haben ;)

    Ist aber nicht ausschlaggebend für den Fehler
    Nein^^
    Ich habe mir nen kleinen Debuger selbst gebaut, der an jeder Stelle im Programm verschiedene Zustandsnachrichten ausgibt.
    Habe dabei die Position von i ständig verändert und einfach vor dem Posten im Forum vergessen wieder zurück zusetzen^.^
  • Thallius schrieb:

    Grundsätzlich hast Du zwei-drei Fehler drin:

    1) Ein C-Array beginnt immer bei 0. Dein erstes Element ist also i[0] und nicht i[1];
    2) Überlege mal genau wenn du z.B. 1024 also Zwischensumme hast, welches Bit du als erstes bekommen würdest? Sicherlich nicht das Bit 0 sondern wohl eher das Bit 10. Wenn Du also count von 1024 runter zählst, dann must du das natürlich auch in der reihenfolge in die Bit-Array füllen. Weiterhin hast du gar keinen Platz in Deinem Array für bit 10 da es nur nur 10 bit groß ist und Du folglich auch nur bit 0 bis 9 speichern kannst.
    3) Ein weiteres großes Problem ist, das Dein Programm bei einer Tahl größer 1023 nicht mehr funktionieren wird da Du ja maximal 10 Bit annimmst. Also solltest du entweder 64 Bit nehmen oder abfragen ob die Zahl größer 1023 ist und dann eine Fehlermeldung ausgeben statt zu berechnen.

    Gruß

    Claus
    Hallo und danke für deinen Beitrag.

    1.) Ich fange ja deswegen mit i = 1 ein nicht mit i = 0
    2.) Dieses Problem ist ja dadurch zu lösen, dass ich die Ausgabe einfach anders rum einstelle, aber selbst dann stimmt es nicht ganz.
    Habe auch Jetzt 11 Arrays für Bits eingerichtet.

    3.) Es werden auch nur Zahlen bis 1024 erstmal benötigt.
  • gm12345 schrieb:

    Thallius schrieb:

    Grundsätzlich hast Du zwei-drei Fehler drin:

    1) Ein C-Array beginnt immer bei 0. Dein erstes Element ist also i[0] und nicht i[1];
    2) Überlege mal genau wenn du z.B. 1024 also Zwischensumme hast, welches Bit du als erstes bekommen würdest? Sicherlich nicht das Bit 0 sondern wohl eher das Bit 10. Wenn Du also count von 1024 runter zählst, dann must du das natürlich auch in der reihenfolge in die Bit-Array füllen. Weiterhin hast du gar keinen Platz in Deinem Array für bit 10 da es nur nur 10 bit groß ist und Du folglich auch nur bit 0 bis 9 speichern kannst.
    3) Ein weiteres großes Problem ist, das Dein Programm bei einer Tahl größer 1023 nicht mehr funktionieren wird da Du ja maximal 10 Bit annimmst. Also solltest du entweder 64 Bit nehmen oder abfragen ob die Zahl größer 1023 ist und dann eine Fehlermeldung ausgeben statt zu berechnen.

    Gruß

    Claus
    Hallo und danke für deinen Beitrag.

    1.) Ich fange ja deswegen mit i = 1 ein nicht mit i = 0
    2.) Dieses Problem ist ja dadurch zu lösen, dass ich die Ausgabe einfach anders rum einstelle, aber selbst dann stimmt es nicht ganz.
    Habe auch Jetzt 11 Arrays für Bits eingerichtet.

    3.) Es werden auch nur Zahlen bis 1024 erstmal benötigt.


    1) Verstehe ich nicht. Claus sagte es doch schon. Das Array wird doch an Stelle [0] gar nicht befüllt.
    Ich bin gegen Signaturen!!!
  • Arrays fangen in C bei "0" zu zählen an. Gewöhn dir nichts falsches gleich zu beginn an!!!

    Ansonsten wieso nicht verUNDen und SCHIEBEN oder ... oder ...??? Im I-Net findet man sicher einige Lösungen/Ansäzte dazu, von denen man sich inspirieren lassen kann.

    Auch ohne Debug-Ausgaben lässt sich das debuggen...
  • gm12345 schrieb:


    1.) Ich fange ja deswegen mit i = 1 ein nicht mit i = 0
    2.) Dieses Problem ist ja dadurch zu lösen, dass ich die Ausgabe einfach anders rum einstelle, aber selbst dann stimmt es nicht ganz.
    Habe auch Jetzt 11 Arrays für Bits eingerichtet.

    3.) Es werden auch nur Zahlen bis 1024 erstmal benötigt.



    Wieder mal eins dieser Postings, dass inhaltlich zu erfassen mein Geist zu simpel ist … :S
  • kmr schrieb:

    gm12345 schrieb:


    1.) Ich fange ja deswegen mit i = 1 ein nicht mit i = 0
    2.) Dieses Problem ist ja dadurch zu lösen, dass ich die Ausgabe einfach anders rum einstelle, aber selbst dann stimmt es nicht ganz.
    Habe auch Jetzt 11 Arrays für Bits eingerichtet.

    3.) Es werden auch nur Zahlen bis 1024 erstmal benötigt.



    Wieder mal eins dieser Postings, dass inhaltlich zu erfassen mein Geist zu simpel ist … :S

    :rolleyes:
    Ich bin gegen Signaturen!!!