Pascal es un lenguaje “fuertemente tipado”. Esto significa que hay limitaciones bastante estrictas sobre cómo pueden asignarse datos de un determinado tipo a otras de tipo diferente.

En general los datos asignados a una variable deben ser del mismo tipo, pero existen algunas excepciones. Cuando se pueden asignar datos a una variable de diferente tipo, a estos tipos de datos se denominan “tipos de datos compatibles”.

Los tipos de datos compatibles son los tipos de datos enteros, reales y subrango.

Las reglas de utilización de los tipos de datos compatibles son:

Primera regla. Los tipos de datos enteros pueden asignarse a variables con tipos de datos reales. Sin embargo, lo contrario no es posible, es decir que los tipos de datos reales no pueden asignarse a variables con tipos de datos enteros.

A continuación un ejemplo de esta regla:

Como se puede observar, el valor de la variable de tipo longint se asigno sin problema alguno a la variable de tipo real, siendo estos tipos de datos distintos. Hacer lo contrario asignar un real a un tipo de dato entero ocasionará que el programa no pueda ser compilado.

Segunda reglas. Los tipos de datos enteros son compatibles para asignación unos con otros, pero se debe tener en cuenta el rango. Por ejemplo si a una variable A de tipo “integer” se le asigna el dato 4568, para luego asignar la variable A, a otra variable B de tipo Byte, se guardará un dato truncado o recortado al tamaño de la variable B, esto debido a que 4568 no está dentro del rango permitido del tipo de dato Byte.

A continuación un ejemplo de esta regla:

Como puede observar al intentar asignar un valor fuera del rango de un tipo de dato byte, sucede lo siguiente, el número se trunca tomando sólo un byte del número 4568, es decir 216. Para entenderlo mejor el equivalente en hexadecimal de 4568 es $11D8, y al asignarlo a un tipo de dato byte, el compilador lo trunca asignado sólo $D8 que es el 216, e ignorando los bits que se encuentran a la izquierda de $11D8. Por ejemplo si asignamos el número de tipo longint $4525A689, a una variable de tipo byte el compilador truncará y asignará el número $89. Y si se asigna el mismo número a una variable de tipo integer entonces se asignará $A689.

Tercera regla. Los tipos de datos reales son compatibles para asignación unos con otros, pero se debe tener en cuenta el rango. Es decir si se asigna una variable de tipo double a una variable de tipo single, entonces se pierde precisión en las cifras significativas.

Cuarta regla. Los tipos de datos subrango, al ser definidos de un tipo de dato entero, sólo son compatibles para asignación con otro tipo de dato entero; si el tipo de dato subrango es definido con un tipo de dato carácter es sólo compatible con un tipo de dato carácter y del mismo modo con los tipos de datos enumerados.