diff options
| author | Sadeep Madurange <smadurange@users.noreply.github.com> | 2021-12-01 21:39:50 +0800 |
|---|---|---|
| committer | Sadeep Madurange <smadurange@users.noreply.github.com> | 2021-12-01 21:39:50 +0800 |
| commit | b289ca6aad91532fd6598be112f656f51fffcfc7 (patch) | |
| tree | 9e2914ef9946c6825ac43dece5b2348288e97e11 | |
| parent | ad0fe282e99f42a90b2e378832bc911b3e805fa0 (diff) | |
| download | k&r-exercises-b289ca6aad91532fd6598be112f656f51fffcfc7.tar.gz | |
2.9
| -rw-r--r-- | 2/9.c | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -0,0 +1,18 @@ +#include <stdio.h> + +/* counts 1-bits in x */ +int bitcount(unsigned x); + +int main(int argc, char *argv[]) { return 0; } + +int bitcount(unsigned x) { + // Explanation: on a two's complement system, x - 1 is performed by + // adding the two's complement of 1 (i.e. 111...1) to x. Adding 1 to + // the rightmost 1-bit results in 0 which when &-ed with x, results in 0. + int b; + + for (b = 0; x != 0; x &= (x - 1)) + b++; + + return b; +}
\ No newline at end of file |
