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_1.c | 41 +++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100755 reference/C/CONTRIB/SNIP/bitcnt_1.c (limited to 'reference/C/CONTRIB/SNIP/bitcnt_1.c') diff --git a/reference/C/CONTRIB/SNIP/bitcnt_1.c b/reference/C/CONTRIB/SNIP/bitcnt_1.c new file mode 100755 index 0000000..735c4e1 --- /dev/null +++ b/reference/C/CONTRIB/SNIP/bitcnt_1.c @@ -0,0 +1,41 @@ +/* +** Bit counter by Ratko Tomic +*/ + +int bit_count(long x) +{ + int n = 0; +/* +** The loop will execute once for each bit of x set, this is in average +** twice as fast as the shift/test method. +*/ + if (x) do + n++; + while (0 != (x = x&(x-1))) + ; + return(n); +} + +#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 = bit_count(n); + printf("%ld contains %d bit%s set\n", + n, i, plural_text(i)); + } +} + +#endif /* TEST */ -- cgit v1.2.3-54-g00ecf