Dezimalzahl in Binärdarstellung
-
Habe mal ein Programm geschrieben, das eine einfache Dezimalzahl in Binärform umwandelt. Kommt aber keine Ausgabe und ich finde einfach nicht den Fehler.
#include <iostream> #include <math.h> using namespace std; int main() { int eingabe,temp,y; cin >> eingabe; for(int x=1;x<eingabe;x++){ if(eingabe<=pow(2,x)) y=x; } for(int x=y;x>=0;x--){ if(pow(2,y)<=eingabe){ eingabe=eingabe-(pow(2,y)); temp=1; } else temp=0; cout << temp; } return 0; }
-
Schau mal in die FAQ
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39490.html
dann nach unten scrollen...template <unsigned int NrOfBits> string DezToBin(int Wert) { bitset<NrOfBits> AlsBits(Wert); return AlsBits.to_string(); }
-
Das habe ich bereits gesehen.
Mir geht es aber darum, dass mein Programm geht.
-
Habe mal ein Programm geschrieben, das eine einfache Dualzahl in Binärform umwandelt.
Ist Dual und binär nicht das gleiche?
Kommt aber keine Ausgabe und ich finde einfach nicht den Fehler.
Kommt eine Fehlermeldung oder schließt einfach die konsole? 2. -> Konsolen FAQ
-
Ist Dual und binär nicht das gleiche?
Jap. Binär und Dual bezeichnen beide das 2er System. Wir rechnen normalerweise im 10er System, d.h. dem Dezimalsystem.
-
Meine auch das Dezimalsystem. Tut mir leid für das Missverständnis

Bei meinem Programm gebe ich eine Zahl ein die in 'eingabe' gelesen wird, aber es kommt nichts raus. Am Ende kommt nur <terminated> blabla.exe
-
Was er damit sagen will ist , das das Dezimale eine Basis von 10 hat und Ziffern von 0-9 und das Dualsystem hat eine Basis von 2 und hat nur die Ziffern 0 oder 1 die einen Zustand beschreiben .. Hehe.. kenn mich um DUalsystem (subtrahieren,addieren etc) nur so gut aus weil wir das heute gerade in Digitaltechnik hatten und ich man was besser wissen wollte als (D)Evil xD
MFG TOa
Edit : Mist zu spätz^^
-
M4ST0R schrieb:
Das habe ich bereits gesehen.
Mir geht es aber darum, dass mein Programm geht.
Der erste Teil - die Berechnung von y - ist bereits falsch. Du musst die Schleife abbrechen, wenn ein x erreicht ist wobei 2^x > eingabe ist. Grob korrigiert so
int y = 1; for( int x=1; ; ++x ){ if( eingabe < pow(2,x) ) break; // Abbruch da 2^x jetzt größer als die Eingabe ist. y = x; // 2^x ist noch <= eingabe; also x in y merken }Im zweiten Teil hast Du einfach x und y verwechselt. Da wo pow(2,y) steht, ist pow(2,x) richtig.
Ein Tipp: verzichte auf die Funktion pow() und bestimme die Zahl 2^x durch wiederholtes multiplizieren mit 2. Die Suche nach dem richtigen y sähe dann so aus:
int y = 0; for( int x=2; ; x*=2 ){ if( eingabe < x ) break; // Abbruch da 2^x jetzt größer als die Eingabe ist. ++y; // nach ++y gilt 2^y == x } // 2^y ist jetzt die größte Zahl der Form 2^x, // die kleiner oder gleich der eingabe ist.Gruß
Werner
-
Vielen dank Werner, das hat mir sehr geholfen. Mein Programm funktioniert nun wunderbar.
Bei der 2. Schleife die du angegeben hast müsste y=1 sein, da wir x=2 zuweisen. Ansonsten ist alles in Ordnung.
-
M4ST0R schrieb:
Bei der 2. Schleife die du angegeben hast müsste y=1 sein, da wir x=2 zuweisen.
Ich hatte es ausprobiert. Mit y=1 als Startwert wird die Binärzahl mit einer führenden '0' ausgegeben. Ich meine y=0 ist korrekt.
Wenn die Eingabe ==0 oder ==1 ist, so bleibt y=0 stehen und wird nicht inkrementiert. Dann wird die untere Schleife genau einmal durchlaufen und genau eine (Binär-)Stelle ausgegeben. Was ja auch ok ist.Gruß
Werner