Объединение различающихся целых типов

Обзор

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

Примечание

Можно найти максимальные или минимальные значения для любого целого типа MATLAB с помощью функций intmin и intmax. Для типов с плавающей точкой используйте realmax и realmin.

Пример объединения со знаком с без знака

Теперь сделайте то же осуществление с целыми числами со знаком и беззнаковым целым. Снова, крайний левый элемент определяет тип данных для всех элементов в получившейся матрице:

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
Была ли эта тема полезной?