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

Обзор

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

Примечание

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

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

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

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

Похожие темы