Programación en Ada/Tipos/Enteros
Tipos enteros con signo Editar
Un tipo entero con signo se define declarando un rango, por ejemplo:
type Índice is 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 Índice is range 1 .. 50; for Índice'Size use 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.
-- File: range_1.adb (view) (download) with Ada.Text_IO; procedure Range_1 is type Range_Type is range -5 .. 10; package T_IO renames Ada.Text_IO; package I_IO is new Ada.Text_IO.Integer_IO (Range_Type); begin for A in Range_Type loop I_IO.Put ( Item => A, Width => 3, Base => 10); if A < Range_Type'Last then 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 Nombre is 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 Byte is mod 256; subtype Medio_Byte is Byte range 0 .. 127;
Pero, cuidado porque el módulo de Medio_Byte sigue siendo 256.