Main Content

Valores enteros

Clases de enteros

MATLAB® tiene cuatro clases de enteros con signo y cuatro sin signo. Los tipos con signo le permiten trabajar con enteros negativos y positivos, pero no pueden representar un rango de números tan amplio como los tipos sin signo, ya que se utiliza un bit para designar un signo positivo o negativo del número. Los tipos sin singo le ofrecen un amplio rango de números, pero estos números solo pueden ser cero o positivos.

MATLAB admite almacenamiento de 1, 2, 4 y 8 bytes para datos enteros. Puede ahorrar memoria y tiempo de ejecución de los programas si utiliza el tipo de entero más pequeño que admitan sus datos. Por ejemplo, no necesita un valor entero de 32 bits para almacenar el valor 100.

Estas son las ocho clases de enteros, el rango de valores que puede almacenar con cada tipo y la función de conversión de MATLAB necesaria para crear ese tipo:

Clase

Rango de valores

Función de conversión

Valor entero de 8 bits con signo

-27 a 27-1

int8

Valor entero de 16 bits con signo

-215 a 215-1

int16

Valor entero de 32 bits con signo

-231 a 231-1

int32

Valor entero de 64 bits con signo

-263 a 263-1

int64

Valor entero de 8 bits sin signo

0 a 28-1

uint8

Valor entero de 16 bits sin signo

0 a 216-1

uint16

Valor entero de 32 bits sin signo

0 a 232-1

uint32

Valor entero de 64 bits sin signo

0 a 264-1

uint64

Creación de datos enteros

De forma predeterminada, MATLAB almacena datos numéricos como de punto flotante de doble precisión (double). Para almacenar datos como un entero, necesita convertir de double al tipo de entero que desee. Utilice una de las funciones de conversión que se muestran en la tabla anterior.

Por ejemplo, para almacenar 325 como un entero de 16 bits con signo asignado a la variable x, escriba

x = int16(325);

Si el número que se quiere convertir en un entero tiene una parte fraccionaria, MATLAB lo redondea al entero más próximo. Si la parte fraccionaria es exactamente 0.5, entonces, a partir de los dos enteros más próximos, MATLAB elige aquel cuyo valor absoluto es mayor en magnitud:

x = 325.499;
int16(x)
ans =
	
  int16

   325         

x = x + .001;
int16(x)
ans =

  int16

   326                                      

Si necesita redondear un número utilizando un esquema de redondeo distinto del predeterminado, MATLAB le proporciona cuatro funciones de redondeo: round, fix, floor y ceil. La función fix le permite sobrescribir el valor predeterminado y redondear a cero cuando hay una parte fraccionaria distinta de cero:

x = 325.9;

int16(fix(x))
ans =

  int16

   325

Las operaciones aritméticas que incluyen tanto valores enteros como de punto flotante siempre resultan en un tipo de datos enteros. MATLAB redondea el resultado, cuando es necesario, según el algoritmo de redondeo predeterminado. El siguiente ejemplo produce una respuesta exacta de 1426.75, que MATLAB redondea después al siguiente valor entero más alto:

int16(325) * 4.39
ans =

  int16

   1427

Las funciones de conversión de enteros también resultan útiles cuando convierte otras clases, como cadenas, a valores enteros:

str = 'Hello World';

int8(str)
ans =

  1×11 int8 row vector

    72   101   108   108   111    32    87   111   114   108   100

Si convierte un valor NaN en una clase de enteros, el resultado es un valor de 0 en esa clase de enteros. Por ejemplo:

int32(NaN)
ans =

  int32

   0

Operaciones aritméticas en clases de enteros

MATLAB puede realizar operaciones aritméticas de enteros sobre los siguientes tipos de datos:

  • Valores enteros o arreglos de enteros del mismo tipo de datos enteros. Esto produce un resultado que tiene el mismo tipo de datos que los operandos:

    x = uint32([132 347 528]) .* uint32(75);
    class(x)
    ans =
       uint32
  • Valores enteros o arreglos de enteros y números escalares de punto flotante de doble precisión. Esto produce un resultado que tiene el mismo tipo de datos que los operandos de enteros:

    x = uint32([132 347 528]) .* 75.49;
    class(x)
    ans =
       uint32

Para todas las operaciones binarias en las que un operando sea un tipo de datos de arreglo de enteros (excepto enteros de 64 bits) y el otro sea un doble escalar, MATLAB calcula la operación utilizando aritmética de doble precisión elemento por elemento y, a continuación, convierte el resultado de nuevo en el tipo de datos de enteros original. Para operaciones binarias que implican un arreglo de enteros de 64 bits y un doble escalar, MATLAB calcula la operación como si se utilizase aritmética de precisión extendida de 80 bits para evitar la pérdida de precisión.

No se admiten operaciones que implican números complejos con tipos de enteros.

Valores más grandes y más pequeños para clases de enteros

Para cada tipo de datos enteros, existe un número más grande y más pequeño que puede representar con ese tipo. La tabla que se muestra en Valores enteros enumera los valores más grandes y más pequeños para cada tipo de datos enteros en la columna "Rango de valores".

También puede obtener estos valores con las funciones intmax e intmin:

intmax('int8')               
ans =

  int8

   127

intmin('int8')   
ans =

  int8

   -128

Si convierte un número que supere el valor máximo de un tipo de datos enteros a ese tipo, MATLAB lo establece en el valor máximo. De forma similar, si convierte un número que sea más pequeño que el valor mínimo del tipo de datos enteros, MATLAB lo establece en el valor mínimo. Por ejemplo:

x = int8(300)
x =

  int8

   127
               
x = int8(-300)
x =

  int8

   -128

Además, cuando el resultado de una operación aritmética que implica valores enteros supera el valor máximo (o mínimo) del tipo de datos, MATLAB lo establece en el valor máximo (o mínimo):

x = int8(100) * 3
x =

  int8

   127

x = int8(-100) * 3
x =

  int8

   -128