fork(1) download
  1. #include <stdio.h>
  2.  
  3. unsigned int bits0(unsigned int num) {
  4. int count = 0; while(num) num >>=1, ++count; return count;
  5. }
  6. int bits1(int x) {
  7. int y=0, n=1, c=8; // поставить sizeof/2 для универсальности
  8. do {
  9. y = x >> c;
  10. if (y != 0) {n += c; x = y;}
  11. c >>= 1;
  12. } while (c != 0);
  13. return n;
  14. }
  15. int main(int argc, char **argv) {
  16. unsigned int j=1<<1,i=0;
  17. for (;i<15;++i,j<<=1){
  18. unsigned int d = j|1;
  19. printf("%lu==%lu\n", bits0(d), bits1(d));
  20. }
  21. for (i=1;i<65536;++i)
  22. if(bits0(i)!=bits1(i))
  23. printf("ERROR i=%d %lu!=%lu\n", bits0(i), bits1(i));
  24.  
  25. return 0;
  26. }
Success #stdin #stdout 0s 2248KB
stdin
Standard input is empty
stdout
2==2
3==3
4==4
5==5
6==6
7==7
8==8
9==9
10==10
11==11
12==12
13==13
14==14
15==15
16==16