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

Informatiker Board » Themengebiete » Praktische Informatik » Softwaretechnik » Bits verschieben » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Bits verschieben
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
user684
Jungspund


Dabei seit: 09.11.2017
Beiträge: 11

Bits verschieben Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
09.11.2017 17:49 user684 ist offline Beiträge von user684 suchen Nehmen Sie user684 in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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++
}
09.11.2017 23:46 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
user684
Jungspund


Dabei seit: 09.11.2017
Beiträge: 11

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
10.11.2017 00:09 user684 ist offline Beiträge von user684 suchen Nehmen Sie user684 in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Es erfüllt die gesamte Aufgabe. Es werden nur keine führenden nullen ans ende der invertierten zahl angefügt.
10.11.2017 11:44 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Und die Ausgabe fehlt.
10.11.2017 11:45 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
user684
Jungspund


Dabei seit: 09.11.2017
Beiträge: 11

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
03.01.2018 20:38 user684 ist offline Beiträge von user684 suchen Nehmen Sie user684 in Ihre Freundesliste auf
user684
Jungspund


Dabei seit: 09.11.2017
Beiträge: 11

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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)
04.01.2018 11:25 user684 ist offline Beiträge von user684 suchen Nehmen Sie user684 in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Softwaretechnik » Bits verschieben