Linus Torwalds stellt in seinem G+ Stream zwei C-Ausdrücke vor:
/* Modified Carl Chatfield G+ version for 32-bit */
long a = (mask-256) >> 23;
long b = mask & 1;
return a + b + 1;
/* Jan Achrenius on G+ for 64-bit case */
return mask*0x0001020304050608 >> 56;
Die Frage für Rätselfreunde ist (ohne den G+-Beitrag gelesen zu haben): Was berechnen die Ausdrücke?
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=f68e556e23d1a4176b563bcb25d8baf2c5313f91;hp=23f347ef63aa36b5a001b6791f657cd0e2a04de3
long count_masked_bytes(long mask)