typecasting type traduccion punteros flotante entero convertir cast c casting

traduccion - type casting c++



¿El comportamiento de lanzar un doble negativo a unsigned int definido en el estándar C? (1)

No

Esta conversión no está definida y por lo tanto no es portátil.

C99 / C11 6.3.1.4

Cuando un valor finito de tipo flotante real se convierte en un tipo entero distinto de _Bool, la parte fraccionaria se descarta (es decir, el valor se trunca hacia cero). Si el valor de la parte integral no puede representarse por el tipo entero, el comportamiento es indefinido.

Según C11 6.3.1.4 nota 61:

La operación de resto realizada cuando un valor de tipo entero se convierte en un tipo sin signo no necesita realizarse cuando un valor de tipo flotante real se convierte en un tipo sin signo. Por lo tanto, el rango de valores flotantes reales portátiles es (−1, Utype_MAX + 1).

Tengo un código que se ejecuta en diferentes plataformas que parece obtener resultados diferentes. Estoy buscando una explicación adecuada.

Windows:

double dbl = -123.45; int d_cast = (unsigned int)dbl; // d_cast == -123

WinCE (ARM):

double dbl = -123.45; int d_cast = (unsigned int)dbl; // d_cast == 0

EDITAR:

Gracias por apuntar en la dirección correcta.

arreglar la solución

double dbl = -123.45; int d_cast = (unsigned)(int)dbl; // d_cast == -123 // works on both.