exponenta event banner

Объединение в отличие от целочисленных типов

Обзор

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

Связанные темы