Programación en Ada/Tipos/Enteros

De Wikilibros, la colección de libros de texto de contenido libre.
Saltar a: navegación, buscar
← Tipos Enteros Tipos/Enumeraciones →


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 last + 1 \equiv first y first - 1 \equiv last.

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.

Manual de referencia de Ada[editar]