binarynumber
-
Hallo Leute,
ich habe ein Problem, und zwar funktioniert mein code nicht, und ich weiß nicht wieso...
Also ich wollte ein Programm schreiben das ganz einfach eine Dezimalzahl zur Basis 2 umrechnet.Das ergebnis sollte dann so ausgegeben werden:
"Ergebnis+zahl10^(Anzahl der Durchläufe)",
damit das z.b. so aussieht:
"1*10^0 + 0*10^1 + 110^2 + ... = ...101"Die Umrechnungsformel ist am beispiel 13:
Die Zahl 13 wird folgendermaßen in das Dualsystem umgerechnet: 1. 13%2 ergibt 1, die 1 ist die letzte Ziffer der Dualzahl 2. 13/2 ergibt 6, damit rechne nun weiter 3. 6%2 ergibt 0, die 0 ist die vorletzte Ziffer der Dualzahl 4. 6/2 ergibt 3, damit rechne nun weiter 5. 3%2 ergibt 1, die 1 ist die drittletzte Ziffer der Dualzahl 6. 3/2 ergibt 1, damit rechne nun weiter 7. 1%2 ergibt 1, die 1 ist die viertletzte Ziffer der Dualzahl 8. 1/2 ergibt 0,Abbruch, da Ergebnis 0 ist Die Dualzahl lautet: 1101 und entspricht 1*(2 hoch 3) + 1*(2 hoch 2) +0*(2 hoch 1) + 1*(2 hoch 0) ergibt also 13.Ach ich denke ihr versteht besser was ich meine wenn ihr den Code seht:
#include <iostream> #include <string> using namespace std; int main() { int a,Basis=2,Ergebnis=0,Rest,Durchlauf=0; cout<<"Zahl: "; cin>>a; while(a!=0) { // Beispiel: für a=13, Basis=2 Rest=a%Basis; // 13%2=1 // 6%2=0 // 3%2=1 // 1%2=1 a=a/Basis; // 13/2=6 // 6/2=3 // 3/2=1 // 1/2=0 Ergebnis=Ergebnis+(Rest*(10^Durchlauf)); // 0+(1*1)=1 // 1+(0*10)=1 // 1+(1*100)=101 // 101+(1*1000)=1101 } cout<<"Ergebnis: "<<Ergebnis; cin.get(); cin.get(); return 0; }Aber der macht das iwie nicht...
und ich weiss nich wieso...
(das der zwischendurch aufhören wird, weil a im zwischenschritt 0 wird, ist mir klar, bin schon am überlegen, wie ich den durchlaufen lassen kann, mir ist aber leider bisher noch nix schlaues eingefallen^^)Ich hoffe ihr wisst was ich meine und könnt mir helfen.
Wenn was unklar ist einfach fragen.
MFG, Daniel
-
^ ist kein Potenz-Operator sondern ein xor.
-
-
wow, stimmt,
danke, für die schnellen antworten
-
Der C++-Header heißt übrigens <cmath>.
-
so klappt alles wunderbar,
man muss nur darauf achten, dass hinter zahlen ein . steht und hinter variablen nix:#include <iostream> #include <string> #include <cmath> using namespace std; int main() { int a,Basis=2,Ergebnis=0,Rest,Durchlauf=0,x; cout<<"Zahl: "; cin>>a; while(a!=0) { Rest=a%Basis; a=a/Basis; Ergebnis=Ergebnis+(Rest*pow(10.,Durchlauf)); Durchlauf++; } cout<<"Ergebnis: "<<Ergebnis; cin.get(); cin.get(); return 0; }so jetzt muss ich das ganze nur noch auf nen stringstream ausgeben, und fertig^^
danke leute.
ps: wieso funktioniert das bei großen zahlen nicht?
-
//edit fehler..
-
Du meinst, bei Zahlen, die mehr als 10 Binärstellen haben? Irgendwann ist mit der Rechengenauigkeit eines ints eben Schluss. Ich bezweifle mal auch ganz stark deine Wahl von int als Ergebnistyp. int ist ein Datentyp für Ganzzahlen. Du möchtest eine bestimmte Darstellung einer Zahl. Das ist wie der Unterschied zwischen dem philosophischem Konzept der Zahl 2 und dem tatsächlichen Zeichen '2' aus den arabischen Ziffern. In anderen Kulturen hätte ich statt '2' auch II oder 10 schreiben können. Die Bedeutung dahinter ist aber immer die gleiche. Du suchst für deine Darstellung daher eher einen Datentyp, um Zeichen zu speichern, z.B. string.
zuckerlie schrieb:
Versuche mal anstelle eines int ein long zu nehmen
Unser Programm funktioniert an sich nicht! Lasst uns mehr Rechenpower dranschmeißen und das Problem vertuschen!