Wie viele einsen kommen vor?

marvellous

Mitglied
ich bin im1. Semester und bereite mich auf die Prüfungen vor.
Ich hänge grad an ein er Aufgabe: http://nk.stzre.de/upload/downloads/2009_i1_pr_ss09.pdf
Die Nr. 3.
_________________________________________________________________
Als Gewicht einer Variablen bezeichnet man die Anzahl der binären Einsen, die die
Zahl besitzt. Zum Beispiel besitzt die Variable x mit unsigned char x=23; das
Gewicht 4 (23 =00010111).
Schreiben Sie die Funktion weight(), die als Übergabeparameter die zu
untersuchende Variable x vom Typ unsigned char erhält und das Gewicht als
Rückgabewert zurückliefert.
_________________________________________________________________


Versteh ich die Aufgabe überhaupt richtig? Soll ich mit dem gegebenen Beispiel ein Programm erstellen?
Meine Überlegungen: Eine Schleife, welche die einzelnen Zahlen vergleicht und bei 0 zur nächsten Zahl überspringt, aber ich weiß leider nicht wie ich das umsetzen kann.
 
Zuletzt bearbeitet:
Willkommen bei tutorials.de :)

Kennst du dich mit den Operatoren << und & aus bzw. dürft ihr die verwenden?

C++:
char weight(unsigned char x)
{
    char ret=0,i;
    for(i=0;i<8;i++)
    {
        if(x&(1<<i))
            ret++;
    }
    return ret;
}

Gruß
 
Zuletzt bearbeitet:
Hey,

also so wie ich es verstehe, musst du die übergebene Zahl x (z.B. 23) erst in die binäre Form umrechnen und dann eben die 1en zählen. Sieht auf den ersten Blick nicht all zu schwer aus. Einzige was schwiriger ist, die binäre Form auszurechnen. Aber da musst dir halt ne Funktion überlegen :)

grüße
 
@Crash Kid: Warum extra umrechnen? Schau dir doch den Code mal an, das kann man sich auch sparen.

@marvellous: Ich habs zwar nicht ausprobiert, aber ja, das wars :D
Ich mach noch einen Test...

edit: Code ist Korrekt.

edit2: << kann man mit "nach links verschieben" gleichsetzen, ja.

zB:
00000001 einmal verschieben ergibt
00000010, nocheinmal ergibt
00000100 usw.

Wenn man die Zahlen ins Dezimale umrechnet, sieht man, dass es auch gleichzeitig "mal 2" bedeutet
Die Zahlen von oben sind 1, 2 und 4
00001000 wäre dann 8.

Noch ein Sinn dahinter:
1<<xyz kann man deshalb mit "1 mal (2 hoch xyz)" gleichsetzen.
Das "1 mal" fällt sowieso weg, übrig bleibt:
1<<xyz bedeutet 2 hoch xyz.

Gruß
 
Zuletzt bearbeitet:
Wie ich meine Antwort geschrieben habe, gabs den Code noch nicht :). Schau mal auf die Uhrzeit, wir haben zeitgleich geantwortet...
 
Genau. So kannst du die Ganzzahl in ihre binäre Form umrechnen. Aber laut sheel, brauchst du das mit dem obigen Code nicht. Ich hab ihn nicht ausprobiert, aber er wollte es ja noch testen.

gruß
 
ahja hast jetzt auf 8 geändert :P
ok hab den code kapiert:) das ist auch die aufgabenstellung odeR? :D oder doch mit umwandeln******** :) ansonsten dankeschön:)
 
Zurück