Dezimalzahl in Binärzahl umwandeln



  • Hallo,

    mit welchem Befehl kann ich eine Dezimalzahl in eine Binärzahl umwandeln? Danach möchte ich die Binärzahl in Char Array abspeichern, so dass ich auf die einzelnen Bits zugreifen kann. Wie kann ich dies lösen?

    DANKE EUCH!



  • Hi,

    mir is keine Funktion bekannt, die das fuer dich macht. Da musst du dir schon
    ne eigene schreiben, is ja nicht so schwer

    mfg
    v R



  • Und wie wärs mit einer Struktur??

    Z. B.

    struct stBits
    {
       unsigned int bit0 :1;
       unsigned int bit1 :1;
       ...
    };
    

    😃



  • www.google.de http://www.htblmo-klu.ac.at/lernen/grundlagen/algorith.htm

    /*Umrechnung: DEZIMAL - BINÄR*/
    
    #include <stdio.h>
    #include <conio.h>
    void main()
    {
      long int dezimal;
      int bin[32],i;
      for (i=0; i<32; i++)
        bin[i]=0;
      clrscr();
      printf("Geben Sie die dezimale Zahl ein: ");
      scanf("%ld",&dezimal);
      i=31;
      while(dezimal > 0)
      {
        bin[i--]=dezimal%2;
        dezimal=dezimal/2;
      }
      printf("\nBinäre Darstellung:");
      for (i=0; i<32; i++)
      {
        printf("%1d",bin[i]);
        if (i%4 == 0)
          printf(" ");
      }
      getch();
    }
    
    /*Umrechnung: DEZIMAL - BINÄR (rekursive Variante)*/
    
    #include <stdio.h>
    #include <conio.h>
    void dez_bin(long int z);
    void main()
    {
      long int dezimal;
      clrscr();
      printf("Geben Sie die dezimale Zahl ein: ");
      scanf("%ld",&dezimal);
      printf("\nBinäre Darstellung:\n");
      dez_bin(dezimal);
      getch();
    }
    void dez_bin(long int z)
    {
      if (z>0)
      {
        dez_bin(z/2);
        printf("%1d",z%2);
      }
    }
    
    /*Umrechnung: BINÄR - DEZIMAL*/
    
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    void main()
    {
      char bin[100];
      long int wert;
      int i;
      clrscr();
      printf("Geben Sie die binäre Zahlendarstellung ein: ");
      gets(bin);
      for (wert=i=0; bin[i] != '\0'; i++)
        wert=wert*2+bin[i]-48;
      printf("\nDezimaler Wert: %ld",wert);
      getch();
    }
    


  • @Dill:
    Ich halte es für mächtig übertrieben, so eine simple Routine rekursiv berechnen zu lassen:

    void dez_bin(long int z)
    {
      char str[33];
      str[32] = '\0';
      for( int i=31; i>=0; i--, z>>=1)
        str[i] = (z&1)+ '0';
      printf( str, 0);
    }
    


  • Ganz elegant kannst du es auch per Shift- und Bit-Operatoren machen:

    long zahl;
    int i;
    ...
      for(i=sizeof(zahl)*8-1; i>=0; --i)
         printf("%ld%s", (zahl>>i) & 1, (i%8==0) ? " " : "");
    ...
    

    Mit der Zählvariablen i gehst du jedes Bit durch, vom ersten bis zum letzten. Du fängst beim ersten Bit an und "shiftest" dich durch alle Bits der Zahl. Durch die bitweise &-Verknüpfung wird immer dann eine 1 ausgegeben, wenn sie auch bei dem entsprechenden Bit der Zahl gesetzt ist. Nach jeder 8. Stelle wird ein Leerzeichen ausgegeben, das erledigt die bedingte Anweisung in printf().

    Edit: die Ausgabe dann in einem String zu speichern dürfte ja nicht das problem darstellen, ich wollte hier nur das Prinzip verdeutlichen...

    [ Dieser Beitrag wurde am 11.06.2003 um 10:56 Uhr von RTC editiert. ]



  • Original erstellt von RenéG:
    Ich halte es für mächtig übertrieben, so eine simple Routine rekursiv berechnen zu lassen:

    Nö, wieso? Weil bei jedem Aufruf z lokal neu angelget wird? Das ist bei Rekursionen nicht auszuschließen, ich halte die rekursiven Aufrufe hier für schön übersichtlich!

    [ Dieser Beitrag wurde am 11.06.2003 um 10:59 Uhr von RTC editiert. ]



  • Mit der Funktion *_itoa kann ich einen Integer in einen String konvertieren.
    Also einen Integer als Binärdarstellung in einem String festhalten.
    Natürlich ist hier keine Bitmanipulation möglich,rein visuelle Darstellung.

    #include <stdio.h>
    #include <stdlib.h>
    // ..
    char buffer[33]; // für long + '\0'
    long Integer = 12345;
    //..
    _itoa( Integer, buffer, 2 ); // Radix 2 für binäre Darstellung
    printf( "Integer in String als binaere Darstellung %ld = %s\n", Integer,
    buffer);
    

    Danach möchte ich die Binärzahl in Char Array abspeichern, so dass ich auf die einzelnen Bits zugreifen kann. Wie kann ich dies lösen?

    Gehts Dir hier um die Zusammenfassung von Daten in einem Array ?

    Eine Zahl(abhängig vom Datentyp)speicherst Du ganz easy mit einem Cast.

    long Long = 12345;
    short Short = 12345;
    char Array[500];

    // Zahl in Array speichern

    (long)Array = Long ; // bei einer long Zahl
    (short)Array = Short; // bei einer short Zahl
    (short)&Array[84] = Short; // Speicherung der Short Zahl an Pos.85 im Array

    Mfg Giga



  • _itoa() ist kein standard

    rekusriv ist das ganze schwachsinn, denn eine einfache schleife tut es auch.

    strlen() ist ja auch nicht so implementiert:

    int strlen(const char* str)
    {
      if(!*str) return 0;
      return 1+strlen(&str[1]);
    }
    

    das ist einfach sinnloser overhead...

    und von void main(), conio.h und clrscr() will ich garnicht erst anfangen.
    IIRC steht irgendwo in den FAQ auch was dazu...


Anmelden zum Antworten