Programación en Ada/Tipos/Enteros

← 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.

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.

Manual de referencia de Ada

editar