Tomando en cuenta que tratamos solo con enteros positivos, lo de dividir por dos es buena idea, además existe el operador de desplazamiento a izquierda que permite dividir entre potencias de 2 siempre que X sea entero positivo:
Por ejemplo X shl 1 equivale a X div 2.
Pero también sería suficiente esta función:
Bits:=Trunc( log2((Numero shl 1)+1) );
No recuerdo si en pascal estándar tienes el logaritmo en base 2, pero si tienes ln puedes obtener el log2 con esta ecuación:
log2(x)=(ln(x)/ln(2))
O también:
BitsNecesarios:=0;
While (Numero>0) do
begin
Numero:=Numero shr 1;{Dividir entre dos}
Inc(BitsNecesarios);{incrementar en 1}
end;
result:=BitsNecesarios;