というわけで、こういうのを考えてみた。

int log16(unsigned int a){
return a<0x10?1:a<0x100?2:a<0x1000?3:4;
}

4桁分までしか書いてないけどこれを8桁分まで書けばいいか。