Dezimalzahl in Binär Zahl umrechnen
-
SeppJ schrieb:
Ich will dir jetzt nicht deine Hausaufgaben machen, aber mal ein Beispiel als Anregung:
Beispiel 13:
- 13 enthält 0 mal 2^4=16 -> fünftletzte Stelle ist 0, Rest 13
- 13 enthält 1 mal 2^3=8 -> viertletzte Stelle ist 1, Rest 5
- 5 enthält 1 mal 2^2=4 -> drittletzte Stelle ist 1, Rest 1
- 1 enthält 0 mal 2^1=2 -> vorletzte Stelle ist 0, Rest 1
- 5 enthält 1 mal 2^0=1 -> letzte Stelle ist 1, Rest 0Ergebnis: 1101
Und eine Umsetzung mit "Array" könnte dann so aussehen:
unsigned int number = 43; unsigned int length = static_cast<unsigned int>( log2f(number) + 1 ); unsigned int * digits = new unsigned int[length]; for(unsigned int i=0; i < length; i++, number /= 2) digits[length - i-1] = number % 2; delete[] digits;(Kurz zusammengehackt und ungetestet).
Wenn du das Posting von SeppJ verstanden hast, solltest du auch meinen Code verstehen.
-
Naja irgendwie versteh ich da leider nicht viel von deinem Source Code das beispiel von SeppJ das hab ich zwar verstanden aber den Source Code versteh ich leider nicht

-
dez schrieb:
Naja irgendwie versteh ich da leider nicht viel von deinem Source Code das beispiel von SeppJ das hab ich zwar verstanden aber den Source Code versteh ich leider nicht

Na wenn du den "Algo" von SeppJ verstanden hast, dann kannst du ihn doch auch implementieren. (Was aber letztlich auch wieder auf meinen Code rauslaufen wird
)PS: Du kannst das übrigens auch ganz einfach mit binärer Arithmetik lösen. Die Schleife könnte dann z.B. so aussehen:
for(unsigned int i=0; i < length; i++) digits[length - i-1] = number & (1 << i) ? 1 : 0;Du shiftest also einfach die 1 an die entsprechende Stelle und ver-UND-est sie mit der Zahl. Wenn dann ein Wert != 0 rauskommt, ist an der Stelle eine 1, sonst eine 0.
-
Naja danke erst mal für die tipps ich werd noch etwas rumprobieren.
-
bisschen overkilled

machs ganz eifnach
int main() { int dec; cin >> dec; vector<int> a; binaer(a, dec) for(unsigned int i = size()-1; i > 0; --i) cout << a[i]; } void binaer(vector<int> a, int dec) { while (dec != 0) { a.push_back( dec%2 ); dec /= 0; } }ungefähr so...
-
Dein Code versucht das selbe zu machen wie meiner. Nur das er falsch ist

-
#include <iostream> #include <string> using namespace std; // Deklaration int iEingabeDez, iBit, iSpeicher; string sDual; // Umrechnung einer Dezimalzahl in eine Dualzahl void dez2dual() { do { iBit = iEingabeDez%2; iEingabeDez /= 2; if (iBit == 1) sDual = "1" + sDual; else sDual = "0" + sDual; } while (iEingabeDez > 0); } int main() { // Eingabeaufforderung cout << "-------------------------------------\nDezimalzahl in Dualzahl umwandeln\n-------------------------------------\n\n"; cout << "Geben Sie eine Dezimalzahl ein:\t"; cin >> iEingabeDez; // Für die spätere Ausgabe nötig iSpeicher = iEingabeDez; // Aufruf des Unterprogramms - Umrechnung dez2dual(); // Ausgabe cout << "\n-------------------------------------\nDualzahl aus " << iSpeicher << ":\t"; cout << sDual << "\n-------------------------------------\n\n\n"; system("PAUSE"); return 0; }Ist ein recht altes Programm von mir... sicherlich Anfängerfehler drin aber es funktioniert und ich denke es ist eins, was du verstehen wirst
-
root2k schrieb:
#include <iostream> #include <string> using namespace std; // Deklaration int iEingabeDez, iBit, iSpeicher; string sDual; // Umrechnung einer Dezimalzahl in eine Dualzahl void dez2dual() { do { iBit = iEingabeDez%2; iEingabeDez /= 2; if (iBit == 1) sDual = "1" + sDual; else sDual = "0" + sDual; } while (iEingabeDez > 0); } int main() { // Eingabeaufforderung cout << "-------------------------------------\nDezimalzahl in Dualzahl umwandeln\n-------------------------------------\n\n"; cout << "Geben Sie eine Dezimalzahl ein:\t"; cin >> iEingabeDez; // Für die spätere Ausgabe nötig iSpeicher = iEingabeDez; // Aufruf des Unterprogramms - Umrechnung dez2dual(); // Ausgabe cout << "\n-------------------------------------\nDualzahl aus " << iSpeicher << ":\t"; cout << sDual << "\n-------------------------------------\n\n\n"; system("PAUSE"); return 0; }Ist ein recht altes Programm von mir... sicherlich Anfängerfehler drin aber es funktioniert und ich denke es ist eins, was du verstehen wirst
Naja, hat ja nichts mit Anfängerfehler zu tuen, da sind generell Fehler drinne. Globale Variablen? Du benutzt eine Funktion warum übergibst du ihr nicht den eingegeben Wert?
-
Wie gesagt, ein Programm von vor ca. 4 Jahren, da fing ich mit der Programmierung an, ich hab nicht mehr drüber geschaut.
Hätte es jetzt vielleicht so gemacht:
#include <iostream> #include <string> using namespace std; // Umrechnung einer Dezimalzahl in eine Dualzahl string convert(int dec) { int bit; string dual; do { bit = dec%2; dec /= 2; if (bit == 1) dual = "1" + dual; else dual = "0" + dual; } while (dec > 0); return dual; } int main() { // Deklaration int dec; // Eingabeaufforderung cout << "Geben Sie eine Dezimalzahl ein:\t"; cin >> dec; // Ausgabe cout << endl << "Dualzahl aus " << dec << ":\t"; cout << convert(dec); cout << endl << endl; return 0; }
-
Ich hab mal kurz ne Frage dazu:
dez schrieb:
#include <iostream> using namespace std; int main(int argc, char* argv[]) { char bin[256]; int i; int num; cout<<"Binaerzahl eingeben: "; cin>>bin; for ( wert = i = 0 ; bin [i] ; i++) { wert = wert * 2 + bin [i] - 48; } cout<<"Dezimalzahl: " << num << "\n"; system("PAUSE"); }kann mir jemand sagen, warum er in Zeile 17 ausgerechnet "-48" rechnen muss?
-
bin[i]-'0'
stell dir vor, in bin[i] steht '5' und dann rechnsest du '5'-'0'. also die ascii-codes davon subtrahierst du.
-
Tut mir leid, ich habs noch nicht ganz...
Wofür genau steht denn die 48? Für einen ascii Code?
-
Sandro L. schrieb:
Tut mir leid, ich habs noch nicht ganz...
Wofür genau steht denn die 48? Für einen ascii Code?
Jop. Ist also ein Offset: (Kannst ja mal raten, was die 48 ist. ;))
http://de.wikipedia.org/wiki/ASCII
-
Von der HEX30, da es in Zeile 3, Spalte 0 liegt. Da 3x16=48 sind, passt das^^
Was genau versteht man unter Offset?

Danke!
-
Sandro L. schrieb:
Von der HEX30, da es in Zeile 3, Spalte 0 liegt. Da 3x16=48 sind, passt das^^
Was genau versteht man unter Offset?

Danke!Jop. Und jetzt schau mal, was in der ASCII-Tabelle für ein Zeichen dafür drin steht..;)
Ein Offset ist ein Versatz. Die Zahlen sind ja um 48 verschoben. (versetzt). Also ist das der Versatz. (Offset).
-
Dann ist ja alles klar. Danke!