Programación en Ada/Tipos/Enteros
Tipos enteros con signo
[editar]Un tipo entero con signo se define declarando un rango, por ejemplo:
type
Índiceis
range
1 .. 50;
Los extremos del rango se pueden consultar con los atributos 'First y el 'Last del tipo.
Cuando se asigna un valor a una variable de este tipo, se chequea en tiempo de ejecución si pertenece al rango. En caso negativo se levanta la excepción Constraint_Error.
El compilador puede definir el tamaño más eficiente para el tipo a no ser que se defina una cláusula de representación.
type
Índiceis
range
1 .. 50;for
Índice'Sizeuse
8;
Ejemplo
[editar]El siguiente ejemplo, tomado del wikilibro en inglés sobre Ada, define un nuevo rango de -5 a 10 e imprime el rango completo.
with
Ada.Text_IO;procedure
Range_1is
type
Range_Typeis
range
-5 .. 10;package
T_IOrenames
Ada.Text_IO;package
I_IOis
new
Ada.Text_IO.Integer_IO (Range_Type);begin
for
Ain
Range_Typeloop
I_IO.Put ( Item => A, Width => 3, Base => 10);if
A < Range_Type'Lastthen
T_IO.Put (",");else
T_IO.New_Line;end
if
;end
loop
;end
Range_1;
Tipos enteros con signo predefinidos
[editar]En el paquete Standard se predefinen varios tipos enteros con signo, como Integer (y sus subtipos Natural y Positive), Short_Integer, Long_Integer y posiblemente otros (dependiendo del compilador). Estos tipos tienen los tamaños más adecuados para la arquitectura del computador. Si no tienes razones para definir nuevos tipos enteros, considera usar estos tipos o un subtipo de ellos.
Esta sería una posible representación gráfica de los subtipos de Integer:
Enteros modulares
[editar]Los enteros modulares no tienen signo y son cíclicos, es decir no se produce desbordamiento (overflow) sino wrap-around. Para estos tipos están predefinidos los operadores lógicos (and, or, xor) para realizar operaciones a nivel de bits.
Se definen así:
type
Nombreis
mod
Módulo;
Donde el 'First es 0 y 'Last es Módulo - 1. Como los tipos modulares son cíclicos y .
Se puede definir un subtipo de un tipo modular:
type
Byteis
mod
256;subtype
Medio_Byteis
Byterange
0 .. 127;
Pero, cuidado porque el módulo de Medio_Byte sigue siendo 256.