Was bedeutet der Code

Gast #2359269
Lesenswert?

Dieser Code zählt, wie viele Nullen (in binärer Darstellung) vor der 
ersten Eins stehen. Das Ergebnis steht dann in mob.

Vorsicht: Wenn in maske überhaupt keine Eins vorhanden ist, wird dieser 
Code zu einer Endlosschleife!
Gast #2359523
Lesenswert?

OK das macht Sinn, danke. Aber was ich bisher nicht finden konnte ist 
folgendes:

maske >>= 1 // bedeutet dass wenn maske größer oder gleich 1 ist?

spaetestens dann frage ich mich, das groesser oder gleich so aussieht 
>=. Wieso dann >>=?
Moderator Persönliche Seite #2360247
Lesenswert?

neuling schrieb:
> Aber was ich bisher nicht finden konnte ist
> folgendes

Daher sollst du dir ja auch ein gutes C-Buch zulegen und durcharbeiten.
Das Zusammenfassen einer Operation mit einer Zuweisung ist in C eine
ziemliche Standardoperation.  Das ist nichts anderes, als man auch bei
1
a += 2;

macht, nur eben mit einer Verschiebung statt einer Addition.

Sowas sollte man aber nach dem Studium des C-Buches wirklich erkennen
können.  Es gibt eigentlich nur zwei Konstrukte in C, die ein wenig
sehr gewöhnungsbedürftig und, naja, auch unübersichtlich sind, dass
man einem Anfänger den unverständlichen Blick verzeiht: der Komma-
Operator und der ternäre Operator (?:).  Beide meidet man daher auch
im "Normalbetrieb", aber sie haben gelegentlich ihre Berechtigung
(wie eben der Kommaoperator in der for-Schleife).

OK, "trigraphs" darfst du außerdem noch schräg angucken ;-), aber
die benutzt wohl ohnehin niemand im realen Leben.  Zumindest habe ich
noch keinen gesehen. :)
Persönliche Seite #2360787
Lesenswert?

thorsten schrieb:
> Dieser Code zählt, wie viele Nullen (in binärer Darstellung) vor der
> ersten Eins stehen. Das Ergebnis steht dann in mob.

Wobei von rechts gezählt wird, d.h. anfangend mit dem LSB.

Die Funktion gibt es auch als ffs in string.h, z.B.:
http://nongnu.org/avr-libc/user-manual/group__avr__string.html#gab978764fd2814cd14f9f1a3620aa4ca2

ffs liefert allerdings einen um 1 größeren Wert, d.h.
 0 → 0
 1 → 1
 2 → 2
 3 → 1
 4 → 3
 5 → 1
etc.

Die Vorteile der Bibliotheksfunktion sind:

• Man hat keinen kryptischen Code wie oben in der Quelle
• Der Compiler weiß über die Funktion beschreid (zumindest GCC), d.h.
  falls das Argument konstant ist, kann er den Wert direkt einsetzen
  und das Programm muss nicht zur Laufzeit den Wert berechnen.
  Es steht dann also 3 im Code anstatt ffs(4) im Programm berechnen
  zu lassen.
#2362575
Lesenswert?

neuling schrieb:
> OK das macht Sinn, danke. Aber was ich bisher nicht finden konnte ist
> folgendes:
>
> maske >>= 1 // bedeutet dass wenn maske größer oder gleich 1 ist?
>
> spaetestens dann frage ich mich, das groesser oder gleich so aussieht
>>=. Wieso dann >>=?

Ich denke er meint was dieses seltsame doppele grösser-als-zeichen hier 
soll.
Das ist kein Vergleichszeichen sondern eine Bitoperation. Hiermit wird 
das Bit in der maske jedesmal nach rechts weitergeschoben.

http://www.mikrocontroller.net/articles/Bitmanipulation

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren