Haz los bits subyacentes acaba de obtener "reinterpretado" como un valor de punto flotante?
No, el valor se convierte de acuerdo con las reglas de la norma.
hay una conversión de tiempo de ejecución para producir el valor de punto flotante más cercano?
Sí hay una conversión en tiempo de ejecución.
Para coma flotante -> entero, el valor se trunca, siempre que el valor fuente esté dentro del rango del tipo entero. Si no es así, el comportamiento no está definido. Al menos creo que es el valor de la fuente, no el resultado, lo que importa. Tendría que buscarlo para estar seguro. El caso límite si el tipo de destino es char, por ejemplo, sería CHAR_MAX + 0.5
. Creo que no está definido lanzarlo a char, pero como digo no estoy seguro.
Para número entero -> punto flotante, el resultado es el mismo valor exacto si es posible, o de lo contrario es uno de los dos valores de coma flotante a cada lado del valor entero. No necesariamente el más cercano de los dos.
¿Es endianness un factor en cualquier plataforma (es decir, endianness de floats difiere de ints)?
No, nunca. Las conversiones se definen en términos de valores, no de representaciones de almacenamiento.
¿Cómo se comportan los diferentes tipos de ancho (por ejemplo, int para flotar vs. int para el doble)?
Todo lo que importa son los rangos y las precisiones de los tipos.Suponiendo 32 bit ints y IEEE 32 bit floats, es posible que una conversión int-> float sea impreciso. Suponiendo también dobles IEEE de 64 bits, no es posible que una conversión int-> doble sea imprecisa, porque todos los valores int se pueden representar exactamente como un doble.
¿Qué garantiza el estándar de idioma sobre la seguridad de dichos moldes/conversiones? Por elenco, me refiero a un elenco de static_cast o C-style.
Como se indicó anteriormente, es seguro excepto en el caso en que un valor de coma flotante se convierta en un tipo entero, y el valor esté fuera del rango del tipo de destino.
Si un flotador tiene un valor de magnitud pequeño (por ejemplo, 2), ¿el patrón de bits tiene el mismo significado cuando se interpreta como un int?
No, no es así. La representación IEEE de 32 bits de 2 es 0x40000000
.
Lea * §4.9 - Conversiones integrales flotantes *. –
Acepto que esta pregunta debe ser respondida por investigación propia: D tendríamos que copiar las normas de pegado y los manuales de la CPU: D –
@StringRay: http://stackoverflow.com/questions/81656/where-do-i-find-the -corrent-c-or-c-standard-documents –