fork download
  1. #include <stdio.h>
  2.  
  3. typedef unsigned char uint8_t;
  4.  
  5. const uint8_t log2_8_LUT[8] =
  6. {
  7. 0, 5, 1, 6, 4, 3, 2, 7
  8. };
  9.  
  10. inline uint8_t log2_8(uint8_t val)
  11. {
  12. //Round up to the nearest power of two minus 1.
  13. val |= val >> 1;
  14. val |= val >> 2;
  15. val |= val >> 4;
  16.  
  17. //Multiply by a magic number to generate a unique sequence of numbers
  18. //The magic number is a de Bruijn sequence of alphabet k = 2 and length n = 3.
  19. //Right shift by (2^n - n) to isolate the 3 bit sequence.
  20. return log2_8_LUT[(uint8_t)(0x1D * val) >> 5];
  21. }
  22.  
  23. int main(void)
  24. {
  25. for(int i = 0; i < 256; ++i)
  26. {
  27. printf("log2(%i) = %i\n", i, log2_8((uint8_t)i));
  28. }
  29. }
Success #stdin #stdout 0s 2156KB
stdin
Standard input is empty
stdout
log2(0) = 0
log2(1) = 0
log2(2) = 1
log2(3) = 1
log2(4) = 2
log2(5) = 2
log2(6) = 2
log2(7) = 2
log2(8) = 3
log2(9) = 3
log2(10) = 3
log2(11) = 3
log2(12) = 3
log2(13) = 3
log2(14) = 3
log2(15) = 3
log2(16) = 4
log2(17) = 4
log2(18) = 4
log2(19) = 4
log2(20) = 4
log2(21) = 4
log2(22) = 4
log2(23) = 4
log2(24) = 4
log2(25) = 4
log2(26) = 4
log2(27) = 4
log2(28) = 4
log2(29) = 4
log2(30) = 4
log2(31) = 4
log2(32) = 5
log2(33) = 5
log2(34) = 5
log2(35) = 5
log2(36) = 5
log2(37) = 5
log2(38) = 5
log2(39) = 5
log2(40) = 5
log2(41) = 5
log2(42) = 5
log2(43) = 5
log2(44) = 5
log2(45) = 5
log2(46) = 5
log2(47) = 5
log2(48) = 5
log2(49) = 5
log2(50) = 5
log2(51) = 5
log2(52) = 5
log2(53) = 5
log2(54) = 5
log2(55) = 5
log2(56) = 5
log2(57) = 5
log2(58) = 5
log2(59) = 5
log2(60) = 5
log2(61) = 5
log2(62) = 5
log2(63) = 5
log2(64) = 6
log2(65) = 6
log2(66) = 6
log2(67) = 6
log2(68) = 6
log2(69) = 6
log2(70) = 6
log2(71) = 6
log2(72) = 6
log2(73) = 6
log2(74) = 6
log2(75) = 6
log2(76) = 6
log2(77) = 6
log2(78) = 6
log2(79) = 6
log2(80) = 6
log2(81) = 6
log2(82) = 6
log2(83) = 6
log2(84) = 6
log2(85) = 6
log2(86) = 6
log2(87) = 6
log2(88) = 6
log2(89) = 6
log2(90) = 6
log2(91) = 6
log2(92) = 6
log2(93) = 6
log2(94) = 6
log2(95) = 6
log2(96) = 6
log2(97) = 6
log2(98) = 6
log2(99) = 6
log2(100) = 6
log2(101) = 6
log2(102) = 6
log2(103) = 6
log2(104) = 6
log2(105) = 6
log2(106) = 6
log2(107) = 6
log2(108) = 6
log2(109) = 6
log2(110) = 6
log2(111) = 6
log2(112) = 6
log2(113) = 6
log2(114) = 6
log2(115) = 6
log2(116) = 6
log2(117) = 6
log2(118) = 6
log2(119) = 6
log2(120) = 6
log2(121) = 6
log2(122) = 6
log2(123) = 6
log2(124) = 6
log2(125) = 6
log2(126) = 6
log2(127) = 6
log2(128) = 7
log2(129) = 7
log2(130) = 7
log2(131) = 7
log2(132) = 7
log2(133) = 7
log2(134) = 7
log2(135) = 7
log2(136) = 7
log2(137) = 7
log2(138) = 7
log2(139) = 7
log2(140) = 7
log2(141) = 7
log2(142) = 7
log2(143) = 7
log2(144) = 7
log2(145) = 7
log2(146) = 7
log2(147) = 7
log2(148) = 7
log2(149) = 7
log2(150) = 7
log2(151) = 7
log2(152) = 7
log2(153) = 7
log2(154) = 7
log2(155) = 7
log2(156) = 7
log2(157) = 7
log2(158) = 7
log2(159) = 7
log2(160) = 7
log2(161) = 7
log2(162) = 7
log2(163) = 7
log2(164) = 7
log2(165) = 7
log2(166) = 7
log2(167) = 7
log2(168) = 7
log2(169) = 7
log2(170) = 7
log2(171) = 7
log2(172) = 7
log2(173) = 7
log2(174) = 7
log2(175) = 7
log2(176) = 7
log2(177) = 7
log2(178) = 7
log2(179) = 7
log2(180) = 7
log2(181) = 7
log2(182) = 7
log2(183) = 7
log2(184) = 7
log2(185) = 7
log2(186) = 7
log2(187) = 7
log2(188) = 7
log2(189) = 7
log2(190) = 7
log2(191) = 7
log2(192) = 7
log2(193) = 7
log2(194) = 7
log2(195) = 7
log2(196) = 7
log2(197) = 7
log2(198) = 7
log2(199) = 7
log2(200) = 7
log2(201) = 7
log2(202) = 7
log2(203) = 7
log2(204) = 7
log2(205) = 7
log2(206) = 7
log2(207) = 7
log2(208) = 7
log2(209) = 7
log2(210) = 7
log2(211) = 7
log2(212) = 7
log2(213) = 7
log2(214) = 7
log2(215) = 7
log2(216) = 7
log2(217) = 7
log2(218) = 7
log2(219) = 7
log2(220) = 7
log2(221) = 7
log2(222) = 7
log2(223) = 7
log2(224) = 7
log2(225) = 7
log2(226) = 7
log2(227) = 7
log2(228) = 7
log2(229) = 7
log2(230) = 7
log2(231) = 7
log2(232) = 7
log2(233) = 7
log2(234) = 7
log2(235) = 7
log2(236) = 7
log2(237) = 7
log2(238) = 7
log2(239) = 7
log2(240) = 7
log2(241) = 7
log2(242) = 7
log2(243) = 7
log2(244) = 7
log2(245) = 7
log2(246) = 7
log2(247) = 7
log2(248) = 7
log2(249) = 7
log2(250) = 7
log2(251) = 7
log2(252) = 7
log2(253) = 7
log2(254) = 7
log2(255) = 7