Целые числа

Целочисленные классы

MATLAB® имеет четыре подписанных и четыре класса беззнаковых целых чисел. Типы со знаком позволяют вам работать с отрицательными целыми числами, а также положительный, но не могут представлять столь же широкую область значений чисел как типы без знака, потому что один бит используется, чтобы определять положительный или знак минус для номера. Типы без знака дают вам более широкую область значений чисел, но эти числа могут только быть нулем или положительный.

MATLAB поддерживает 1-, 2-, 4-, и 8-байтовое хранение для целочисленных данных. Можно сохранить память и время выполнения для программ, если вы используете самый маленький целочисленный тип, который хранит ваши данные. Например, вам не нужно 32-битное целое число, чтобы сохранить значение 100.

Вот восемь целочисленных классов, область значений значений, которые можно сохранить каждым типом и функцией преобразования MATLAB, требуемой создать тот тип:

Класс

Область значений значений

Функция преобразования

8-битное целое число со знаком

- 27 к 27-1

int8

16-битное целое число со знаком

- 215 к 215-1

int16

32-битное целое число со знаком

- 231 к 231-1

int32

64-битное целое число со знаком

- 263 к 263-1

int64

8-битное целое число без знака

0 к 28-1

uint8

16-битное целое число без знака

0 к 216-1

uint16

32-битное целое число без знака

0 к 232-1

uint32

64-битное целое число без знака

0 к 264-1

uint64

Создание целочисленных данных

MATLAB хранит числовые данные как плавающую точку двойной точности (double) по умолчанию. Чтобы хранить данные как целое число, необходимо преобразовать от double к желаемому целочисленному типу. Используйте одну из функций преобразования, показанных в приведенной выше таблице.

Например, чтобы сохранить 325 как 16-битное целое число со знаком, присвоенное переменной xВвод

x = int16(325);

Если номер, преобразовываемый в целое число, имеет дробную часть, раунды MATLAB к самому близкому целому числу. Если дробной частью является точно 0.5, затем от двух одинаково соседних целых чисел, MATLAB выбирает то, для которого абсолютное значение больше в величине:

x = 325.499;
int16(x)
ans =
	
  int16

   325         

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

  int16

   326                                      

Если вам нужен к раунду номер с помощью округляющейся схемы кроме значения по умолчанию, MATLAB обеспечивает четыре функции округления: roundфиксацияпол, и ceil. fix функция позволяет вам заменить значение по умолчанию и вокруг по направлению к нулю, когда существует ненулевая дробная часть:

x = 325.9;

int16(fix(x))
ans =

  int16

   325

Арифметические операции, которые включают оба целых числа и с плавающей точкой всегда, приводят к целочисленному типу данных. MATLAB округляет результат, при необходимости, согласно алгоритму округления значения по умолчанию. Пример ниже дает к точному ответу 1426.75 который MATLAB затем округляет к следующему самому высокому целому числу:

int16(325) * 4.39
ans =

  int16

   1427

Целочисленные функции преобразования также полезны при преобразовании других классов, таких как строки, к целым числам:

str = 'Hello World';

int8(str)
ans =

  1×11 int8 row vector

    72   101   108   108   111    32    87   111   114   108   100

Если вы преобразуете NaN значение в целочисленный класс, результатом является значение 0 в том целочисленном классе. Например,

int32(NaN)
ans =

  int32

   0

Арифметические операции на целочисленных классах

MATLAB может выполнить целочисленную арифметику на следующих типах данных:

  • Целые числа или целочисленные массивы того же целочисленного типа данных. Это приводит к результату, который имеет совпадающий тип данных как операнды:

    x = uint32([132 347 528]) .* uint32(75);
    class(x)
    ans =
       uint32
  • Целые числа или целочисленные массивы и скалярные числа с плавающей запятой с двойной точностью. Это приводит к результату, который имеет совпадающий тип данных как целочисленные операнды:

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

Для всех бинарных операций, в которых один операнд является массивом целочисленного типа данных (кроме 64-битных целых чисел) и другой, скаляр дважды, MATLAB вычисляет операцию с помощью поэлементной арифметики с двойной точностью, и затем преобразует результат назад в исходный целочисленный тип данных. Для бинарных операций, включающих 64-битный целочисленный массив и скаляр дважды, MATLAB вычисляет операцию, как будто 80-битная арифметика расширенной точности использовалась, чтобы предотвратить потерю точности.

Операции, связавшие комплексные числа с целочисленными типами, не поддержаны.

Самые большие и наименьшие значения для целочисленных классов

Для каждого целочисленного типа данных существует самое большое и самое маленькое число, которое можно представлять с тем типом. Таблица, показанная под Целыми числами, приводит самые большие и наименьшие значения для каждого целочисленного типа данных в “Области значений Значений” столбец.

Можно также получить эти значения с intmax и intmin функции:

intmax('int8')               
ans =

  int8

   127

intmin('int8')   
ans =

  int8

   -128

Если вы преобразуете номер, который больше, чем максимальное значение целочисленного типа данных к тому типу, MATLAB устанавливает его на максимальное значение. Точно так же, если вы преобразуете номер, который меньше, чем минимальное значение целочисленного типа данных, MATLAB устанавливает его на минимальное значение. Например,

x = int8(300)
x =

  int8

   127
               
x = int8(-300)
x =

  int8

   -128

Кроме того, когда результат арифметической операции, включающие целые числа превышают максимум (или минимум) значение типа данных, MATLAB, устанавливает его на максимум (или минимум) значение:

x = int8(100) * 3
x =

  int8

   127

x = int8(-100) * 3
x =

  int8

   -128