合并不同的整数类型
概述
如果您在矩阵中合并不同的整数类型(例如有符号与无符号,或 8 位整数与 16 位整数),MATLAB® 将返回所有元素都属于一个公共类型的矩阵。MATLAB 将生成矩阵的所有元素设置为输入矩阵中的最左侧元素的数据类型。例如,以下串联生成由 3 个 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
合并有符号与无符号整数的示例
现在使用有符号与无符号整数做相同的练习。同样,最左侧的元素决定着生成矩阵中的所有元素的数据类型:
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