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