Если вы комбинируете различные целочисленные типы в матрице (e.g., подписанный с или 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