Если вы комбинируете различные целые типы в матрице (например, без знака или 8-битные целые числа с 16-битными целыми числами), MATLAB® возвращает матрицу, в которой все элементы имеют один общий тип. MATLAB устанавливает все элементы получившейся матрицы в тип данных крайнего левого элемента в вход матрице. Для примера результатом следующей конкатенации является вектор из трех 16-битных целых чисел со знаком:
A = [int16(450) uint8(250) int32(1000000)]
A = 1×3 int16 row vector 450 250 32767
Один раз соедините следующие два числа и переключите их порядок. Значение возврата зависит от порядка, в котором объединяются целые числа. Крайний левый тип определяет тип данных для всех элементов вектора:
A = [int16(5000) int8(50)]
A = 1×2 int16 row vector 5000 50
B = [int8(50) int16(5000)]
B = 1×2 int8 row vector 50 127
Первая операция возвращает вектор с 16-битными целыми числами. Второй возвращает вектор с 8-битными целыми числами. Элемент int16(5000)
установлено в 127
, максимальное значение для 8-битного целого числа со знаком.
Те же правила применяются к вертикальной конкатенации:
C = [int8(50); int16(5000)]
C = 2×1 int8 column vector 50 127
Теперь выполните то же упражнение со знаком и беззнаковыми целыми числами. Снова, самый левый элемент определяет тип данных для всех элементов получившейся матрицы:
A = [int8(-100) uint8(100)]
A = 1×2 int8 row vector -100 100
B = [uint8(100) int8(-100)]
B = 1×2 uint8 row vector 100 0
Элемент int8(-100)
равен нулю, поскольку он больше не подписан.
MATLAB оценивает каждый элемент перед объединением их в объединенный массив. Другими словами, следующий оператор вычисляет 8-битовое целое число со знаком (равное 50) и 8-битное беззнаковое целое число (без знака -50 установлено в нуль), прежде чем эти два элемента будут объединены. После конкатенации второй элемент сохраняет свое нулевое значение, но принимает беззнаковое int8
тип:
A = [int8(50), uint8(-50)]
A = 1×2 int8 row vector 50 0