Que tal, la duda es respecto a la primera parte del código
unsigned long int convertir(unsigned int pf32){
unsigned long int m32, exp32, m64, exp64;
m32 = pf32 & (2^32 -1);
exp32 = (pf32/2^23 )-2^8 ;
...
Según lo que entiendo la función toma un número representado en punto flotante, por ejemplo, si el número es 25828524032 (b10) = 10000000000110000000111 (b2) la entrada entonces sería su representación en punto flotante 0-10010101-000000000001100000001110 (en donde cada guión separa signo, exponente y valor normalizado).
La tercera linea toma la mantisa (sería 2^23 en lugar de 2^32 no?)
Y en la cuarta linea se toma el exponente (porqué se resta 2^8?, pienso que el objetivo es librarse del signo que es el dígito más significativo en ese caso no seria (pf32/2^23 )%2^8 ?).
Quise hacer unas pruebas en c++ pero me salen advertencias sobre las constantes decimales.
Saludos