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