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-битная арифметика расширенной точности использовалась, чтобы предотвратить потерю точности.
Для каждого целочисленного типа данных существует самое большое и самое маленькое число, которое можно представлять с тем типом. Таблица, показанная под Целыми числами, приводит самые большие и наименьшие значения для каждого целочисленного типа данных в “Области значений Значений” столбец.
Можно также получить эти значения с функциями intmin
и intmax
:
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