Binarausgabe Null zuviel!
-
Hey
Ich habe ein Programm das eine Dezimalzahl in Binärumwandeln soll nur krieg ich am anfang eine Null zu viel wen ich alles ausgebe.
#include <iostream> using namespace std; int input=0,counter=0; int bin[99]; int main() { for(unsigned int i = 0; i < 100; i++) { bin[i] = 0; } cout << "Eingabe : "; cin >> input; do{ bin[counter] = input % 2; input = input / 2; counter += 1; }while(input > 0); for(int i = counter;i >= 0; i--) { cout << bin[i]; } cout << endl; return 0; }Der Code ist sehr einfach deshalb lass ich das erklären hier mal.
Also wen ich z.B. 12 eingebe sollte 1100 rauskommen doch ich bekommme 01100 raus hat einer eine Idee wie ich das hinbekomme.
Danke im vorraus !
-
In der Schleife
do{ bin[counter] = input % 2; input = input / 2; counter += 1; }while(input > 0);wird überprüft, ob input >0 ist.
Was meinst du, was passiert, wenn input 1 ist und durch 2 dividiert wird?
Ja genau, dann hast du 0. Die zählst du im counter mit, was nicht gewünscht ist.
Darum:do{ bin[counter] = input % 2; input = input / 2; if(input>0) //Abfrage, ob 0 ist counter += 1; //counter++ ist besser }while(input > 0);
-
Also für mich sieht es so aus, als sei der Fehler bei der Ausgabe
Chrome schrieb:
for(int i = counter;i >= 0; i--) { cout << bin[i]; } cout << endl;müsste eigentlich
for(int i = counter; i>0;) { --i; cout << bin[i]; } cout << endl;heißen.
-
Chrome schrieb:
int bin[99]; ... for(unsigned int i = 0; i < 100; i++) { bin[i] = 0; } ... }Achtung: Range-overflow. "i" läuft bis 99 und bin[99] ist außerhalb des Arrays.