From 7e0f021a9aec35fd8e6725e87e3313b101d26f5e Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Sun, 27 Jan 2008 11:37:44 +0100 Subject: Initial import (2.0.2-6) --- reference/C/CONTRIB/SNIP/bitcnt_2.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100755 reference/C/CONTRIB/SNIP/bitcnt_2.c (limited to 'reference/C/CONTRIB/SNIP/bitcnt_2.c') diff --git a/reference/C/CONTRIB/SNIP/bitcnt_2.c b/reference/C/CONTRIB/SNIP/bitcnt_2.c new file mode 100755 index 0000000..9046456 --- /dev/null +++ b/reference/C/CONTRIB/SNIP/bitcnt_2.c @@ -0,0 +1,33 @@ +int bitcount(long i) +{ + i = ((i & 0xAAAAAAAA) >> 1) + (i & 0x55555555); + i = ((i & 0xCCCCCCCC) >> 2) + (i & 0x33333333); + i = ((i & 0xF0F0F0F0) >> 4) + (i & 0x0F0F0F0F); + i = ((i & 0xFF00FF00) >> 8) + (i & 0x00FF00FF); + i = ((i & 0xFFFF0000) >> 16) + (i & 0x0000FFFF); + return (int)i; +} + +#ifdef TEST + +#include +#include + +#define plural_text(n) &"s"[(1 == (n))] + +void main(int argc, char *argv[]) +{ + long n; + + while(--argc) + { + int i; + + n = atol(*++argv); + i = bitcount(n); + printf("%ld contains %d bit%s set\n", + n, i, plural_text(i)); + } +} + +#endif /* TEST */ -- cgit v1.2.3-54-g00ecf