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

Обзор

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

Похожие темы