Целые числа

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

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, type

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, fix, floor, и 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