Könntet ihr mir bitte bei dieser Aufgabe helfen, bei der Eingabe einer Zahl, diese in einer Hexidezimalzahl zu speichern und dann die Einsen zu zählen.. Was muss man ergänzen bzw. ändern... (Glaube size of spielt da auch eine Rolle)
Wäre wirklich nett, wenn ihr mir bei dieser Aufgabe helfen könntet. Bin schon sehr am verzweifeln und mache mir schon seit Monaten Gedanken deswegen...
2>>2.1 Bitmanipulation
Schreiben Sie ein Programm, welches eine unsigned int Variable einliest
und
1. die Anzahl der vorkommenden Einsen im Bitmuster zählt und ausgibt
2. die Reihenfolge der Bits umkehrt und den entstehenden Zahlenwert in
einer neuen unsigned int Variable speichert
3. beide Zahlen im Hexadezimalformat auf den Bildschirm ausgibt
Verwenden Sie zur Losung der Aufgaben Bitoperationen. Nicht erlaubt sind
die mathematische Bibliothek, sowie Felder/Vektoren/Strings/Dateien o.¨a.
Berucksichtigen Sie, dass die Lange des unsigned int Datentyps von der
gegebenen Rechnerhardware abh¨angig ist. Ihr Programm soll plattformunabh¨angig
sein, also sowohl auf 16 Bit, 32 Bit oder 64 Bit Architekturen
laufen (Verwendung des sizeof-Operators). Der Algorithmus ist durch die
Verwendung von Bitoperationen (z.B. &, |, >> usw.) zu realisieren.
Fur die Eingabe der Zahl soll zusätzlich gelten:
• Bei der Eingabe soll die Zahl zunächst als double-Wert eingelesen werden,
und anschließend eine Uberpr ¨ ufung stattfinden, ob die eingegebene ¨
Zahl
– eine ganze Zahl ist
– als unsigned int darstellbar ist
• Fur den Benutzer sollen sehr große Zahlenwerte mithilfe des Zweier- ¨
komplements durch Eingabe eines negativen integer Wertes m¨oglich
sein, d.h. durch Eingabe von z.B. -5 soll die funftgr ¨ ¨oßte unsigned int
Zahl gemeint sein
Geeignete Testfälle zur Uberprüfung Ihres Programmes: ¨
-5, 3000000000 (3 Milliarden), 5000000000 (5 Milliarden), -4.5 <<
Mein Ansatz
#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;
}
Pseudocode:
count =0
inverse = 0
cin >> zahl
for (int i=0; i<sizeof(int)*8;i++)
{
inverse <<= 1
inverse += zahl & 1
zahl >>=1
count++
}
//Ausgabe