MATLAB ® имеет четыре целочисленных класса со знаком и четыре целочисленных класса без знака. Подписанные типы позволяют работать с отрицательными целыми числами, а также с положительными, но не могут представлять такой широкий диапазон чисел, как неподписанные типы, поскольку один бит используется для обозначения положительного или отрицательного знака для числа. Неподписанные типы дают более широкий диапазон чисел, но эти числа могут быть только нулевыми или положительными.
MATLAB поддерживает 1-, 2-, 4- и 8-байтовое хранение целочисленных данных. Можно экономить память и время выполнения программ, если используется наименьший целочисленный тип, вмещающий данные. Например, для сохранения значения не требуется 32-разрядное целое число 100.
Вот восемь целых классов, диапазон значений, которые можно сохранить для каждого типа, и функция преобразования MATLAB, необходимая для создания этого типа:
Класс | Диапазон значений | Функция преобразования |
|---|---|---|
Целое число со знаком 8 бит | от -27 до 27-1 |
|
Знаковое 16-разрядное целое число | от -215 до 215-1 |
|
Подписанное 32-разрядное целое число | от -231 до 231-1 |
|
Подписанное 64-разрядное целое число | от -263 до 263-1 |
|
Беззнаковое 8-разрядное целое число | от 0 до 28-1 |
|
Беззнаковое 16-разрядное целое число | от 0 до 216-1 |
|
Беззнаковое 32-разрядное целое число | от 0 до 232-1 |
|
Беззнаковое 64-разрядное целое число | от 0 до 264-1 |
|
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, 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