Programación en Ada/Tipos/Enteros
Tipos enteros con signo
[editar]Un tipo entero con signo se define declarando un rango, por ejemplo:
typeÍndiceisrange1 .. 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Índiceisrange1 .. 50;forÍndice'Sizeuse8;
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.
withAda.Text_IO;procedureRange_1istypeRange_Typeisrange-5 .. 10;packageT_IOrenamesAda.Text_IO;packageI_IOisnewAda.Text_IO.Integer_IO (Range_Type);beginforAinRange_TypeloopI_IO.Put ( Item => A, Width => 3, Base => 10);ifA < Range_Type'LastthenT_IO.Put (",");elseT_IO.New_Line;endif;endloop;endRange_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í:
typeNombreismodMó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:
typeByteismod256;subtypeMedio_ByteisByterange0 .. 127;
Pero, cuidado porque el módulo de Medio_Byte sigue siendo 256.