Programación en Ada/Tipos/Enteros
Tipos enteros con signo
Un tipo entero con signo se define declarando un rango, por ejemplo:
Plantilla:Ada/Reservada Índice Plantilla:Ada/Reservada Plantilla:Ada/Reservada 1 .. 50;
Los extremos del rango se pueden consultar con los Plantilla:Ada: 'First y el 'Last del tipo.
Cuando se asigna un valor a una Plantilla:Ada: de este tipo, se chequea en tiempo de ejecución si pertenece al rango. En caso negativo se levanta la Plantilla:Ada: Constraint_Error.
El compilador puede definir el tamaño más eficiente para el tipo a no ser que se defina una Plantilla:Ada:.
Plantilla:Ada/Reservada Índice Plantilla:Ada/Reservada Plantilla:Ada/Reservada 1 .. 50; Plantilla:Ada/Reservada Índice'Size Plantilla:Ada/Reservada 8;
Ejemplo
El siguiente ejemplo, tomado del wikilibro en inglés sobre Ada, define un nuevo rango de -5 a 10 e imprime el rango completo.
Plantilla:Ada/Reservada Ada.Text_IO; Plantilla:Ada/Reservada Range_1 Plantilla:Ada/Reservada Plantilla:Ada/Reservada Range_Type Plantilla:Ada/Reservada Plantilla:Ada/Reservada -5 .. 10; Plantilla:Ada/Reservada T_IO Plantilla:Ada/Reservada Ada.Text_IO; Plantilla:Ada/Reservada I_IO Plantilla:Ada/Reservada Plantilla:Ada/Reservada Ada.Text_IO.Integer_IO (Range_Type); Plantilla:Ada/Reservada Plantilla:Ada/Reservada A Plantilla:Ada/Reservada Range_Type Plantilla:Ada/Reservada I_IO.Put ( Item => A, Width => 3, Base => 10); Plantilla:Ada/Reservada A < Range_Type'Last Plantilla:Ada/Reservada T_IO.Put (","); Plantilla:Ada/Reservada T_IO.New_Line; Plantilla:Ada/Reservada Plantilla:Ada/Reservada; Plantilla:Ada/Reservada Plantilla:Ada/Reservada; Plantilla:Ada/Reservada Range_1;
Tipos enteros con signo predefinidos
En el Plantilla:Ada: 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:
<timeline> ImageSize = width:535 height:100 PlotArea = width:480 height:60 left:50 bottom:20 TimeAxis = orientation:horizontal DateFormat = yyyy Define $first = -20 Define $last = 20 Period = from:$first till:$last AlignBars = early Colors =
id:canvas value:rgb(1,1,0.85) id:grey value:gray(0.5)
ScaleMajor = unit:year increment:1000 start:0 gridcolor:grey BackgroundColors = canvas:canvas PlotData =
width:2 bar:Positive from:1 till:$last color:blue bar:Positive at:1 text:"Positive'First=1" shift:(3,3) fontsize:M bar:Natural from:0 till:$last color:green bar:Natural at:0 text:"Natural'First=0" shift:(3,3) fontsize:M bar:Integer from:$first till:$last color:red bar:Integer at:0 mark:(line, black) bar:Integer at:1 mark:(line, black) bar:Integer at:1 text:"1" shift:(0,3) bar:Integer at:$first text:"Integer'First" align:left shift:(3,3) fontsize:M bar:Integer at:$last text:"Integer'Last" align:right shift:(-1,3) fontsize:M
</timeline>
Enteros modulares
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 Plantilla:Ada: lógicos (and, or, xor) para realizar operaciones a nivel de bits.
Se definen así:
Plantilla:Ada/Reservada Nombre Plantilla:Ada/Reservada Plantilla:Ada/Reservada 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 Plantilla:Ada: de un tipo modular:
Plantilla:Ada/Reservada Byte Plantilla:Ada/Reservada Plantilla:Ada/Reservada 256; Plantilla:Ada/Reservada Medio_Byte Plantilla:Ada/Reservada Byte Plantilla:Ada/Reservada 0 .. 127;
Pero, cuidado porque el módulo de Medio_Byte sigue siendo 256.