es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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>

Tags:  , , ,

Answer

  1. Avatar for 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:

    #include <stdio.h>
    #include <stdint.h>
    
    int main(void)
    {
        double lat;
        uint32_t dataWord0 = 0xb9eb04f2;
        lat = (double)(int32_t)dataWord0;
        printf("%f", lat);
    }
    

    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>

Comments are closed.