Минимальное количество битов , необходимое для хранения целого числа:
int minbits = (int)ceil( log10(n) / log10(2) ) ;
Число байтов равно:
int minbytes = (int)ceil( log10(n) / log10(2) / 8 ) ;
Это полностью связанное с FPU решение, производительность может или не может быть лучше, чем условный тест, но, возможно, заслуживает изучения.
[EDIT]
Я сделал расследование; простой цикл из десяти миллионов итераций, описанных выше, занял 918 мс, тогда как принятое решение FredOverflow заняло всего 49 мс (VC ++ 2010). Так что это не является улучшением с точки зрения производительности, хотя может оставаться полезным, если бы это было требуемое количество бит, и возможна дальнейшая оптимизация.