Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

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, MATLAB elige el entero más próximo 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 números 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 vectores de caracteres, 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 a 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. Las operaciones aritméticas producen 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. Las operaciones aritméticas producen 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 Clases de 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

Pérdida de precisión debido a la conversión

Cuando crea un arreglo numérico de enteros grandes (mayores que flintmax), MATLAB representa inicialmente la entrada como doble precisión de forma predeterminada. Se puede perder precisión si convierte esta entrada en el tipo de datos int64 o uint64. Para mantener la precisión, llame a int64 o uint64 con cada elemento escalar del arreglo.

Por ejemplo, convierta un arreglo numérico de enteros grandes en un arreglo de enteros con signo de 64 bits usando int64. El arreglo de salida pierde precisión.

Y_inaccurate = int64([-72057594035891654 81997179153022975])
Y_inaccurate = 1×2 int64 row vector

   -72057594035891656    81997179153022976

En su lugar, llame a int64 con cada elemento escalar para que devuelva un arreglo preciso.

Y_accurate = [int64(-72057594035891654) int64(81997179153022975)]
Y_accurate = 1×2 int64 row vector

   -72057594035891654    81997179153022975

A partir de la versión R2019b, también puede crear el arreglo de enteros sin perder precisión usando los valores binarios o hexadecimales de los enteros.

Y_accurate = [0xFF000000001F123As64 0x1234FFFFFFFFFFFs64]
Y_accurate = 1×2 int64 row vector

   -72057594035891654    81997179153022975