1 #pragma once 2 3 #include <stdint.h> 4 5 bit_length(uint32_t n)6inline static uint32_t bit_length(uint32_t n) { 7 const uint32_t n_minus_1 = n - 1; 8 if (n_minus_1 == 0) { 9 return 0; 10 } else { 11 #ifdef _MSC_VER 12 unsigned long bsr; 13 _BitScanReverse(&bsr, n_minus_1); 14 return bsr + 1; 15 #else 16 return 32 - __builtin_clz(n_minus_1); 17 #endif 18 } 19 } 20