Bitmanipulation

Neue Frage »

Auf diesen Beitrag antworten »
user684 Bitmanipulation

Man sollte ein Programm schreiben, welches die Einser im Bitmuster auszählt und ausgibt.
Dann die Reihenfolge der Bits umgekehrt und den Zahlenwert dann in einer anderen neuen unsigned int Variable speichert und dann beide Zahlen im Hexidezimalform ausgibt.

Ich habe das hier versucht, aber leider geht mein Programm nicht, könnt ihr mir bitte helfen?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
#include <iostream>

using namespace std;


int main() {

    double z;
    unsigned int = 0;
    int eins=0;
    int null=0;
    int einerstelle;
    
    z=(sizeof(int*8));
    
    cout << "Geben Sie eine Zahl ein: " << endl;
    cin >> z;
     
   for(int i;i>=1;i--) {
     
       einerstelle = z & 1;
       if(einerstelle) {
            eins++;
      } else null++;
       z = z >> 1;
     
              
                    
           
    
    return 0;
}
 
Auf diesen Beitrag antworten »
Karlito

Hallo,

Pseudocode der Lösung:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:

count =0
inverse = 0

cin >> zahl

for (int i=0; i<sizeof(int)*8;i++)
{
 inverse <<= 1
 inverse += zahl & 1
 zahl >>=1
 count++
}

//Ausgabe


Hinweis: x<<=1 ist das gleiche wie x = x << 1

Anleitung für Ausgabe:
http://www.cplusplus.com/forum/windows/51591/

Besten Gruß,

Karlito
Auf diesen Beitrag antworten »
user684

Tut mir leid, aber ich habe so was schon integriert in meinem Code , aber es fehlt trotzdem noch ein wichtiger Teil, aber ich weiß nicht, wie ich das realisiere..
Und mein int Parameter ist immer überladen und zeigt was außerhalb des Wertebereichs an....
Auf diesen Beitrag antworten »
Karlito

Ich habe dir die Grundlage für die gesamte Lösung gepostet. Wenn Du keine konkreten Fragen hast, kann ich dir nicht helfen.

Gruß,

Karlito
 
Auf diesen Beitrag antworten »
user684

Bei mir kam aber ein Überlauf von Integer.....
Und viele hatten einen sehr langen Code u.a. auch mit do while Schleife.

Braucht man für das Programm wirklich ein paar Zeilen Code? Hab da so meine Zweifel. Trotzdem Danke.
Auf diesen Beitrag antworten »
as_string

Naja, das Programm hat Karlito ja explizit als Pseudocode gekennzeichnet.
Es kommt eine Warnung, wenn man die Laufvariable der for-Schleife als int deklariert. Vielleicht sollte man size_t verwenden oder es würde auch ein "unsigned int" reichen, was man auch bei den anderen Variablen verwenden sollte.
Allerdings ist ein Problem die count Variable. Da zählt Karlito bei jedem Schleifendurchlauf hoch, was aber, so wie ich die Aufgabe verstehe, nur passieren sollte, wenn gerade eine 1 an der Reihe ist (also wenn zahl & 1 true ist, allerdings dann vor dem zahl >>= 1 überprüfen!)

Gruß
Marco
Auf diesen Beitrag antworten »
Karlito

Ups, da ist mir ein fehler unterlaufen.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
count =0
inverse = 0

cin >> zahl

for (int i=0; i<sizeof(int)*8;i++)
{
 inverse <<= 1
 inverse += zahl & 1
 count+= zahl & 1
 zahl >>=1
}

//Ausgabe
 
Neue Frage »
Antworten »


Verwandte Themen