Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
--- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
---- Softwaretechnik (http://www.informatikerboard.de/board/board.php?boardid=18)
----- Bits verschieben (http://www.informatikerboard.de/board/thread.php?threadid=3774)


Geschrieben von user684 am 09.11.2017 um 17:49:

  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



Geschrieben von Karlito am 09.11.2017 um 23:46:

 

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++
}



Geschrieben von user684 am 10.11.2017 um 00:09:

 

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



Geschrieben von Karlito am 10.11.2017 um 11:44:

 

Es erfüllt die gesamte Aufgabe. Es werden nur keine führenden nullen ans ende der invertierten zahl angefügt.



Geschrieben von Karlito am 10.11.2017 um 11:45:

 

Und die Ausgabe fehlt.



Geschrieben von user684 am 03.01.2018 um 20:38:

 

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



Geschrieben von user684 am 04.01.2018 um 11:25:

 

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)


Forensoftware: Burning Board, entwickelt von WoltLab GmbH