Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Softwaretechnik » Bitmanipulation » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 7 Beiträge
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
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
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.
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
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....
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
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;
}