Guía de seguimiento dinámico de Solaris

conversiones de tipos

Cuando se construyen las expresiones utilizando operandos de distintos tipos pero compatibles, las conversiones de tipo se realizan para determinar el tipo de la expresión resultante. Las reglas de D para las conversiones de tipo son las mismas que las reglas de conversión aritmética para los números enteros en ANSI-C. Estas reglas se denominan en ocasiones como conversiones aritméticas habituales.

Una manera sencilla de describir las reglas de conversión es la siguiente: cada tipo de número entero se clasifica en el orden char, short, int, long, long long, con los tipos sin signo correspondientes asignados un puesto por encima de su equivalente con signo, pero debajo del siguiente tipo de número entero. Cuando construye una expresión utilizando dos operandos de número entero como x + y y los operandos son de tipos de números enteros distintos, se utiliza el tipo de operando con el puesto más alto como el tipo de resultado.

Si se requiere una conversión, el operando de puesto menor es primero promocionado al tipo superior. Esta promoción no cambia el valor del operando: simplemente amplía el valor a un contenedor mayor en función de su signo. Si se promociona un operando sin signo, los bits de orden superior sin utilizar del número entero resultante se rellenan con ceros. Si un operando con signo se promociona, los bits de orden superior sin utilizar se rellenan mediante una extensión del signo. Si un tipo con signo se convierte a un tipo sin signo, primero se amplía el signo del primero y luego se le asigna el nuevo tipo sin signo determinado por la conversión.

Los números enteros y otros tipos también se pueden convertir de un tipo a otro. En D, los punteros y números enteros se pueden convertir a cualquier tipo de número entero o puntero, pero no a otros tipos. Las reglas para convertir y promocionar cadenas y matrices de caracteres se analizan en el Capítulo 6Cadenas. Una conversión de número entero o puntero se forma utilizando una:

y = (int)x;

donde el tipo de destino se coloca entre paréntesis y se utiliza como prefijo de la expresión de origen. Los números enteros se convierten a tipos de puesto superior realizando una promoción. Los números enteros se convierten a tipos de puesto inferior utilizando ceros en los bits de orden superior libres del número entero.

Debido a que D no permite la aritmética de coma flotante, no se permite ninguna conversión o fusión de operando de coma flotante y no se define ninguna regla para la conversión implícita de la coma flotante.