fork download
  1. #include <stdio.h>
  2. #include <assert.h>
  3.  
  4. static int len(unsigned int u)
  5. {
  6. assert(u < 0xFFFFFFFFU);
  7. const int lb = __builtin_clz(u);
  8. const int num_bits = 32 - lb;
  9. const int ret = (num_bits + 7) / 8;
  10. return ret;
  11. }
  12.  
  13. int main(void) {
  14. unsigned int u;
  15. for(u = 1U; u < 256U; ++u) assert(len(u) == 1);
  16. for(u = 256U; u < 256U * 256U; ++u) assert(len(u) == 2);
  17. for(u = 256U * 256U; u < 256U * 256U * 256U; ++u) assert(len(u) == 3);
  18. for(u = 256U * 256U * 256U; u < 256U * 256U * 256U * 256U; ++u) assert(len(u) == 4);
  19. // [...]
  20. return 0;
  21. }
  22.  
Success #stdin #stdout 0s 9296KB
stdin
Standard input is empty
stdout
Standard output is empty