Error al intentar asignar un número negativo a un ent8. El siguiente código genera un error de compilación:
público ent inicia()
{
ent8 b = -2;
devuelve 0;
}
PS> ñ ./prueba.ñ -s prueba
Error: [./prueba.ñ:3:12]: No puedes guardar un valor de tipo 'ent16' en un destino de tipo 'ent8'.
Línea 3: ent8 b = -2;
En la implementación actual el sistema de tipos del compilador no tolera esta asignación, aunque en este caso el valor literal -2 sí cupiera en un ent8.
En este momento, internamente el sistema de tipos interpreta el -2 como de tipo ent16. El proceso es el siguiente:
- Al literal
2 se le asigna el tipo natural más pequeño (en este caso nat8).
- Al literal
2 de tipo nat8 se le aplica la operación unaria -, para convertirlo en negativo. El sistema de tipos no permite que un número natural de 8 bits se asigne a un entero de 8 bits, pues uno de los bits del entero se dedica al signo (0: positivo, 1: negativo), quedando solamente 7 bits disponibles en el entero, donde no caben los 8 bits del nat8. Por ello, al literal -2 se le termina asignando el siguiente tipo entero más pequeño: ent16.
- Finalmente, el
ent16 no cabe en un ent8.
Es preciso ampliar la implementación de los tipos numerales para tener en cuenta estas particularidades.
Error al intentar asignar un número negativo a un ent8. El siguiente código genera un error de compilación:
En la implementación actual el sistema de tipos del compilador no tolera esta asignación, aunque en este caso el valor literal
-2sí cupiera en unent8.En este momento, internamente el sistema de tipos interpreta el
-2como de tipoent16. El proceso es el siguiente:2se le asigna el tipo natural más pequeño (en este casonat8).2de tiponat8se le aplica la operación unaria-, para convertirlo en negativo. El sistema de tipos no permite que un número natural de 8 bits se asigne a un entero de 8 bits, pues uno de los bits del entero se dedica al signo (0: positivo, 1: negativo), quedando solamente 7 bits disponibles en el entero, donde no caben los 8 bits delnat8. Por ello, al literal-2se le termina asignando el siguiente tipo entero más pequeño:ent16.ent16no cabe en unent8.Es preciso ampliar la implementación de los tipos numerales para tener en cuenta estas particularidades.