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