Significa un comportamiento indefinido :-).
En serio, es una forma de tipo de juego de palabras. a
es un float
, pero a
es también un bloque de memoria (normalmente cuatro bytes) con bits en él. (float&)a
significa tratar ese bloque de memoria como si fuera un float
(en otras palabras, lo que realmente es); (int&)a
significa tratarlo como int
. Formalmente, el acceso a un objeto (como a
) a través de una expresión lvalue con un tipo diferente al tipo real del objeto es un comportamiento indefinido, a menos que el tipo sea un tipo de carácter. Prácticamente, si los dos tipos tienen el mismo tamaño, esperaría que los resultados fueran una reinterpretación del patrón de bits. En el caso de float
, el patrón de bits contiene bits para el signo, un exponente y una mantisa. Normalmente, el exponente usará alguna notación de exceso-n, y solo 0.0
tendrá 0 como exponente. (Algunas representaciones, incluida la utilizada en las PC, no almacenarán el bit de orden alto de la mantisa, ya que en una forma normalizada en la base 2, siempre debe ser 1. En tales casos, la mantisa almacenada para 1.0
tendrá todos los bits 0.) También típicamente (y no conozco ninguna excepción aquí), el exponente se almacenará en los bits de orden superior. El resultado es que cuando "escribe un juego de palabras" con un valor de coma flotante en un entero del mismo tamaño, el valor será bastante grande, independientemente del valor del punto flotante.
¿Es esta tarea? – caskey