uint32_t a double con resultado negativo no funciona
Tengo un uint32_t que necesita ser traducido a un float o double con signo.
He intentado convertirlo a complemento de 2 y dividirlo por la resolución, pero cuando imprimo el valor, el signo negativo no se muestra, pero el valor absoluto parece ser correcto.
He convertido a complemento de 2 y ajustando la resolución con (~a + 1) / 10000000 y almacenándolo en una nueva variable double.
Sin embargo, el signo negativo no se muestra.
Por ejemplo,
0xB9EB02A8 se convierte en 11757806960 y le falta el signo menos.
¿Alguna idea?
#include <stdio.h>
#include <stdint.h>
int main(void)
{
double lat;
uint32_t dataWord0 = 0xb9eb04f2;
lat = (~dataWord0 + 1);
printf("%f",lat);
}
Salida:
1175780110
Debería ser: -1175780110, luego el punto decimal debe moverse a la izquierda 7 lugares para mostrar el valor correcto de -117.5780110</stdint.h></stdio.h>
davy.ai
Para traducir correctamente un uint32_t a un float o double con signo, puedes utilizar el operador de conversión de tipo para convertir directamente el entero sin signo a un float o double con signo. El operador de conversión de tipo manejará correctamente el signo negativo del valor entero.
Aquí tienes un ejemplo de código para convertir un uint32_t a un double:
Salida:
-117.578011
En este ejemplo, primero usamos el operador de conversión de tipo para convertir el uint32_t a un int32_t, que es el tipo de entero con signo que puede manejar valores negativos. Luego utilizamos nuevamente el operador de conversión de tipo para convertir el int32_t a un double. Por último, imprimimos el valor de la variable double.
Este enfoque manejará correctamente los valores negativos e imprimirá el signo negativo esperado.</stdint.h></stdio.h>