Anzeige

Dualzahl im Binärzahl


#1
Halli Hallo,
ich soll einen Code schreiben, der Dezimalzahlen in Binärzahlen umrechnet.
Ich hänge grad an einer Aufgabe und soll die Anzahl der einsen im Binärzahl rechnen.
Ich habe einen Programm geschrieben, der was ausliest, was er nicht sollte.
Ich weiß nicht , wo mein Fehler liegt.
Code:
#include<iostream>
#include <cmath>
#include <climits>
using namespace std;
int main()
{
int einsen=0;
int Eingabe=0;
    const int bits_int = sizeof(int)*CHAR_BIT ;
    int feld[bits_int];
    cout<<"Geben Sie eine Zahl ein"<<endl;
    cin>>Eingabe;
      
    for (int i=bits_int-1; i >= 0; i--)
    {      feld[i]=Eingabe%2;

      Eingabe/=2;
      
    
     cout<<feld[i]<<endl;
      
        int m;
         feld[i] = m;
      if (m == 1)
        ++einsen;}
    cout<<"anzahl der einsen"<<einsen;
        
 

    return 0;
}
Danke
 

cwriter

Erfahrenes Mitglied
#2
ich soll einen Code schreiben, der Dezimalzahlen in Binärzahlen umrechnet.
Also ist der Titel falsch? Dualzahl = Binärzahl.

Ich hänge grad an einer Aufgabe und soll die Anzahl der einsen im Binärzahl rechnen.
Ok, stimmt denn die Umrechnung in die Binärzahl? Das wäre zuerst zu prüfen. Kleiner Tipp: Definiere, wie deine Binärzahlen defininiert sind. Sind die kleinsten Einheiten ganz vorn oder ganz hinten?
Also z.B. 5d = 0b0101 (2^{3...0} oder 0b1010 (2^{0...3})? Normalerweise nimmt man die Höherwertigen bits zuerst.


Ich weiß nicht , wo mein Fehler liegt.
Macht ja nichts, dein Compiler weiss es mit ziemlicher Sicherheit. Welchen nutzt du denn?

Schau dir noch einmal genau an, was dein "int m" genau macht. Genauer: welchen Wert m hat, wenn feld[i] m zugewiesen bekommt. Alternativ schaust du dir mal die Compilerwarnungen an.

Gruss
cwriter
 
#3
Also ist der Titel falsch? DualzahlBinärzahl. criterw
Da hast du recht, mein Fehler.
Ok, stimmt denn die Umrechnung in die Binärzahl? Das wäre zuerst zu prüfen. Kleiner Tipp: Definiere, wie deine Binärzahlen defininiert sind. Sind die kleinsten Einheiten ganz vorn oder ganz hinten?
Also z.B. 5d = 0b0101 (2^{3...0} oder 0b1010 (2^{0...3})? Normalerweise nimmt man die Höherwertigen bits zuerst.criterw
eigentlich sollte er so lesen z.b die Zahl 8 in 32bit einliest 0000000000000000000000000001000



Schau dir noch einmal genau an, was dein "int m" genau macht. Genauer: welchen Wert m hat, wenn feld[i] m zugewiesen bekommt. Alternativ schaust du dir mal die Compilerwarnungen an.
Gruss
criterw
feld = die Bitzahl
Das Programm hat keinen Fehler gezeigt, er ist durchgegangen
 

cwriter

Erfahrenes Mitglied
#4
feld = die Bitzahl
Das Programm hat keinen Fehler gezeigt, er ist durchgegangen
Ich rede nicht von Fehlern, sondern von Warnungen (die teilweise schlimmer sind als Fehler).

Macht ja nichts, dein Compiler weiss es mit ziemlicher Sicherheit. Welchen nutzt du denn?
Da du nicht sagen willst, welchen Compiler du nutzt: MSVC++ (Visual Studio) hat die Warnungen direkt bei den Fehlern, bei gcc kannst du ein "-Wall -Wextra" an den Command anhängen. Dann siehst du sicher Warnungen.

eigentlich sollte er so lesen z.b die Zahl 8 in 32bit einliest 0000000000000000000000000001000
Soweit ich das beurteilen kann, tut dein aktueller Code das auch.

Schau dir noch einmal genau an, was dein "int m" genau macht.
Nix dazu?

Gruss
cwriter

/EDIT:
Guck mal:
Code:
g++ binary.cpp -Wall -Wextra
binary.cpp: In function ‘int main()’:
binary.cpp:23:21: warning: ‘m’ may be used uninitialized in this function [-Wmaybe-uninitialized]
          feld[i] = m;
                     ^
Schon cool, oder?
 
#5
cwriter hat gesagt.:
Schau dir noch einmal genau an, was dein "int m" genau macht.
Nix dazu?
Also mit int m meinte ich z.b feld=00010
dann liest er, dass m=00010
dann zählt er wie viele einsen sind es.

cwriter hat gesagt.:
Macht ja nichts, dein Compiler weiss es mit ziemlicher Sicherheit. Welchen nutzt du denn?
Da du nicht sagen willst, welchen Compiler du nutzt: MSVC++ (Visual Studio) hat die Warnungen direkt bei den Fehlern, bei gcc kannst du ein "-Wall -Wextra" an den Command anhängen. Dann siehst du sicher Warnungen.
Ich verwende Code blocks
Ich bin noch an ganz Anfänger, und was du geschrieben hast,kann damit nichts anfangen
 

cwriter

Erfahrenes Mitglied
#6
Also mit int m meinte ich z.b feld=00010
dann liest er, dass m=00010
dann zählt er wie viele einsen sind es.
Und wie sollte das gehen?
1. Hat m einen zufälligen (undefinierten) Wert. Du setzt m ja nie auf einen Wert, sondern das Feld auf m (danach sind sowohl feld als auch m undefiniert).
2. Ist m ein int und feld ein int-array. feld ist also 32x so gross wie m.
3. Selbst wenn du es korrekt umwandeln würdest, wäre m dann wieder dasselbe wie Eingabe, und du hättest nichts gewonnen.

Dein Code ist schon nicht ganz so falsch, aber es müsste halt sein:
C++:
feld[i] = m; // Nicht das
m = feld[i]; // Sondern das
Und wenn man sich das so ansieht, kann man sich m auch ganz sparen.

Code::Blocks ist eine IDE (besserer Texteditor) und kein Compiler.
Hier steht, wo die Einstellungen zu finden sind: https://stackoverflow.com/a/43448646
Und auch C::B hat ein Fehler- und Warnungsfenster.

Ich bin noch an ganz Anfänger, und was du geschrieben hast,kann damit nichts anfangen
Schule/Privat? Wenn du etwas nicht verstehst, ist es immer besser, nachzufragen, statt den Text einfach zu ignorieren. Wir wissen ja nicht, was die genauen Umstände sind und was du schon weisst.

Gruss
cwriter
 
#7
Und wie sollte das gehen?
1. Hat m einen zufälligen (undefinierten) Wert. Du setzt m ja nie auf einen Wert, sondern das Feld auf m (danach sind sowohl feld als auch m undefiniert).
2. Ist m ein int und feld ein int-array. feld ist also 32x so gross wie m.
3. Selbst wenn du es korrekt umwandeln würdest, wäre m dann wieder dasselbe wie Eingabe, und du hättest nichts gewonnen.

Dein Code ist schon nicht ganz so falsch, aber es müsste halt sein:
C++:
feld[i] = m; // Nicht das
m = feld[i]; // Sondern das
Und wenn man sich das so ansieht, kann man sich m auch ganz sparen.


Code::Blocks ist eine IDE (besserer Texteditor) und kein Compiler.
Hier steht, wo die Einstellungen zu finden sind: https://stackoverflow.com/a/43448646
Und auch C::B hat ein Fehler- und Warnungsfenster.


Schule/Privat? Wenn du etwas nicht verstehst, ist es immer besser, nachzufragen, statt den Text einfach zu ignorieren. Wir wissen ja nicht, was die genauen Umstände sind und was du schon weisst.

Gruss
cwriter
Ich bin im ersten Semester und habe noch nicht so viele Kenntnisse im C++ und die mache ich ja grade.
m=feld hat was gebracht und zähl nun die einsen.
ich möchte, dass die Bitzahl von rechts nach links gelesen wird.
Hast du da vielleicht einen Vorschlag
 
Anzeige
Anzeige