Umwandlung von Dezimalzahlen in Dualzahlen!

Trendy Andy

Mitglied
Hi,

gibt es in C/C++ schon eine vordefinierte Funktion, die Dezimalzahlen in Dualzahlen umwandelt oder muss ich die mir selber schreiben?
 
Bsp.:
Code:
std::string dualzahl = "";

int zahl = 439828;

for (int i = zahl; i != 0; )
{
  if (i & 1) dualzahl = dualzahl + std::string("1");
  else dualzahl = dualzahl + std::string("0");
  i = i >> 1;
}

Hab mir das jetzt gerade aus den Fingern gesogen und nicht getestet. Du musst auf jeden Fall den String noch umdrehen.
 
Der Ansatz von Dudadida ist gut. Ich habe das mit dem Umdrehen behoben und auch den Absturz entfernt:
Code:
#include <iostream>   // für io
#include <sstream>    // für's umwandeln (stringstreams)
#include <algorithm>  // für's umdrehen (coole algorithmen)

using std::string;
using std::ostringstream;
 
int main(void)
{
  int zahl = 439828; // unser input

  ostringstream os;  // hier drin binärziffern sammeln

  for ( int i = zahl; i != 0; )
  {
    // es wird immer das rechte bit untersucht (also bit 0)
    // wenn zahl ungerade (Bit 0 == 1), dann
    // "1" an den ostringstream hängen, sonst "0"
    if (i & 1) 
      os << "1";
    else 
      os << "0";
    
    i >>= 1; // nach rechts shiften, um nächste 
             // binärziffer zu untersuchen 
             // (entspricht teilen durch zwei)
  }

  string dualzahl = os.str(); // in string kopieren

  std::reverse( dualzahl.begin(), dualzahl.end() ); // string umdrehen

  std::cout << "Ergebnis: " << dualzahl; // ausgabe

  // warten
  char c;
  std::cin >> c;

  return 0;
}

Das Problem von Dudadidas Code war, dass man nicht einfach ein int zu einem String addiereren kann.

PS: Code läuft mit VS6, sollte aber eigentlich überall laufen.

--Edit:
Mir war noch eingefallen, dass man eventuell mit Streammanipulatoren arbeiten könnte, aber setbase kann leider kein Binärformat.
 
Zuletzt bearbeitet:
Wow! Danke für die fixe Antwort! Klappt wunderbar!

Hab aber noch ein kleines Problem! Ich will eine Datei binär einlesen. Das mach ich mit getc. Wie kann ich jedoch 2 byte binär einlesen? Mit fgets liest er mir dummerweise das ASCII Zeichen ein! Ich brauch aber Dezimalzahlen.
 
Original geschrieben von Trendy Andy
Hi,

gibt es in C/C++ schon eine vordefinierte Funktion, die Dezimalzahlen in Dualzahlen umwandelt oder muss ich die mir selber schreiben?

Nö. ... Doch halt! Nun gibt es sie: :-)
Code:
#include <iostream>   // für io
#include <sstream>    // für's umwandeln
#include <algorithm>  // für's umdrehen

using std::string;
using std::ostringstream;
 
string binary( unsigned int zahl )
{
  ostringstream os;  // hier drin binärziffern sammeln

  for ( int i = zahl; i != 0; )
  {
    // es wird immer das rechte bit untersucht
    // wenn zahl ungerade (Bit 0 == 1),
    // 1 an den ostringstream hängen, sonst 0
    if (i & 1) 
      os << "1";
    else 
      os << "0";
    
    i >>= 1; // nach rechts shiften, um nächste 
             // binärziffer zu untersuchen 
             // (entspricht teilen durch zwei)
  }

  string dualzahl = os.str(); // in string kopieren

  std::reverse( dualzahl.begin(), dualzahl.end() ); // string umdrehen

  return dualzahl;
}

void wait()
{
  // warten
  char c;
  std::cin >> c;
}

int main(void)
{
  std::cout << "Ergebnis: " << binary( 439828 ); 

  wait();
  return 0;
};

---Edit:

Huch! Habe gerade erst deinen Post gesehen. Kannst du dein Problem genauer erklären? Code posten oder so?
 
Zurück