Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error al intentar asignar un número negativo a un ent8 #6

Open
eduardogarre opened this issue Oct 31, 2021 · 0 comments
Open

Error al intentar asignar un número negativo a un ent8 #6

eduardogarre opened this issue Oct 31, 2021 · 0 comments
Labels
errata Algo no funciona mejora Petición de una nueva característica

Comments

@eduardogarre
Copy link
Owner

eduardogarre commented Oct 31, 2021

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:

  1. Al literal 2 se le asigna el tipo natural más pequeño (en este caso nat8).
  2. 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.
  3. Finalmente, el ent16 no cabe en un ent8.

Es preciso ampliar la implementación de los tipos numerales para tener en cuenta estas particularidades.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
errata Algo no funciona mejora Petición de una nueva característica
Projects
None yet
Development

No branches or pull requests

1 participant