Bits verschieben

Neue Frage »

Auf diesen Beitrag antworten »
user684 Bits verschieben

Ich brauche dringend eure Hilfe bei einer Aufgabe, in der man die Anzahl(einer eingegeben Zahl) der vorkommen Einsen im Bitmuster zählt, die Reihenfolge der Bits (umgekehrt) in einer neuen Variable speichert-> Dann Ausgabe im Hexadezimalsystem...

Und wie macht man das so, dass das für eine beliebige eingebene Zahl funktioniert(z.B. cin >>)

Meine Ideen

Ich deklariere die Variablen bitanzahl, deklariere Anzahl für die 1 und 0
Per for Schleife und size of und Verknüpfung mit dem bitmuster= 00000000 zurückführen wieviele einser das Bitmuster hat
 
Auf diesen Beitrag antworten »
Karlito

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
count = 0
inverse = 0
while (zahl)
{
 inverse <<= 1
 inverse += zahl & 1
 zahl >>=1
 count++
}
Auf diesen Beitrag antworten »
user684

Auf welchem Aufgabenteil bezieht sich das?

Diesen?
code:
1:
2:
3:
4:
5:
6:
7:
 for(i=(sizeof(int)*8);i>=1;i--){
    einerstelle = bitmuster & 1;
    if(einerstelle){
      *(eins++);
    }else *(null++);
    bitmuster = bitmuster >> 1;
  }

Und wenn ja kann man das besser optimieren, bzw. das size of trennen von der for Klammer...

Das soll doch die 1en zählen und gleichzeitig den Bitcode rückwärts ausgeben oder?
Wenn , nein, gib mir auch dazu tipps
Auf diesen Beitrag antworten »
Karlito

Es erfüllt die gesamte Aufgabe. Es werden nur keine führenden nullen ans ende der invertierten zahl angefügt.
 
Auf diesen Beitrag antworten »
Karlito

Und die Ausgabe fehlt.
Auf diesen Beitrag antworten »
user684

Kannst du mir bitte beim Ansatz helfen, die Nullen anzufügen , an der invertierten Zahl?

Ansatz * int einsen = 0;
int nullen = 0;
void zaehler(int bitmuster,int *eins,int *null){
int einerstelle;
int i;

for(i=(sizeof(int)*8);i>=1;i--){
einerstelle = bitmuster & 1;
if(einerstelle){
*(eins++);
}else *(null++);
bitmuster = bitmuster >> 1;

Das natürlich in Kombination bzw. Ergänzung mit deinem Code....
Wie kann man das jetzt so umformen, dass es auch angefügt wird....
Was fehlt da noch, eine Schleife??? Und wie fügt man das zusammen ohne, dass das noch überladen wird und dann verfälschte Werte noch rauskommen...
Würdemich um deinen Rat sehr freuen
Auf diesen Beitrag antworten »
user684

das ist mein Hauptproblem ):
2. die Reihenfolge der Bits umkehrt und den entstehenden Zahlenwert in
einer neuen unsigned int Variable speichert

Wie können die Bitform und eine Zahl gleichzeitig gespeichert werden?

Und muss man die Zahl als double deklarieren... ODER als(unsigned int mit size of (double))


Und die Überprüfung findet doch mit einer do while Schleife statt(Überprüfung , dass die Zahl als ganze Zahl und als unsigned int darstellbar ist)
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »