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