<<
ist die bitweiser Linksschiebe-Operator ; sie verschiebt die Bits eines Wertes um den angegebenen Betrag nach links. So 1L<<(32-maskbits)
verschiebt den Wert um 1 nach links 32-maskbits
Zeiten.
&
ist die bitweiser AND-Operator .
Der Schleifenausdruck mask & (1L<<(32-maskbits)) == 0
prüft alle Bits innerhalb des Wertes von mask
, von unten nach oben. Die Schleife stoppt beim ersten (niedrigsten) Nicht-Null-Bit von mask
zu welchem Zeitpunkt maskbits
enthält die Anzahl der Bits über (und einschließlich) diesem Bit.
z.B.
- wenn
mask == 0xFFFF
mask == 0xFFFFFFFF (== binary 11111111111111111111111111111111)
wird die Schleife bei der ersten Iteration angehalten, und maskbits
wird 32 sein
- wenn
mask == 0x0001
mask == 0x00000001 (== binary 00000000000000000000000000000001)
wird die Schleife wieder bei der ersten Iteration angehalten, und maskbits
wird 32 sein
- wenn
mask == 0x1000
mask == 0x01000000 (== binary 00000001000000000000000000000000)
wird die Schleife bei der 24. Iteration angehalten, und maskbits
wird 8