MATLAB中的整数类型(附带实例)
MATLAB 提供了 8 种整数类型,下表列出了它们各自表示的数值范围和转换函数。
不同的整数类型所占用的位数不同,因此能表示的数值范围不同,在实际应用中,应该根据需要的数值范围选择合适的整数类型。有符号整数类型使用一位来表示正负号,因此表示的数值范围和相应的无符号整数类型不同。
由于 MATLAB 中数值的默认存储类型是双精度浮点类型,因此,必须通过表 1 中列出的转换函数将双精度浮点类型数值转换成指定的整数类型数值。
在转换中,MATLAB 默认将待转换数值转换为最近的整数,若小数部分正好为 0.5,那么 MATLAB 转换后的结果取绝对值较大的那个整数。另外,应用这些转换函数可以将其他类型数据转换成指定的整数类型数据。
【实例】通过转换函数创建整数类型。在命令行窗口中输入以下语句,并查看输出结果。
MATLAB 中还有多种取整函数,可以使用不同的策略把浮点小数转换成整数,如下表所示。
当两个具有相同的整数类型的数值进行运算时,运算结果仍然是这种整数类型的数值:当一个整数类型数值与一个双精度浮点类型数值进行数学运算时,运算结果是这种整数类型的数值,取整默认采用四舍五入方式。
注意,不同的整数类型数值之间不能进行数学运算,除非提前进行强制转换。
【实例】整数类型数值参与的运算。在命令行窗口中输入以下语句,并查看输出结果。
整数类型 | 数值范围 | 转换函数 | 整数类型 | 数值范围 | 转换函数 |
---|---|---|---|---|---|
有符号 8 位整数 | −2^7 ∼2^7 −1 | int8 | 无符号 8 位整数 | 0∼2^8 −1 | uint8 |
有符号 16 位整数 | −2^15 ∼2^15 −1 | int16 | 无符号 16 位整数 | 0∼2^16 −1 | uint16 |
有符号 32 位整数 | −2^31 ∼2^31 −1 | int32 | 无符号 32 位整数 | 0∼2^32 −1 | uint32 |
有符号 64 位整数 | −2^63 ∼2^63 −1 | int64 | 无符号 64 位整数 | 0∼2^64 −1 | uint64 |
不同的整数类型所占用的位数不同,因此能表示的数值范围不同,在实际应用中,应该根据需要的数值范围选择合适的整数类型。有符号整数类型使用一位来表示正负号,因此表示的数值范围和相应的无符号整数类型不同。
由于 MATLAB 中数值的默认存储类型是双精度浮点类型,因此,必须通过表 1 中列出的转换函数将双精度浮点类型数值转换成指定的整数类型数值。
在转换中,MATLAB 默认将待转换数值转换为最近的整数,若小数部分正好为 0.5,那么 MATLAB 转换后的结果取绝对值较大的那个整数。另外,应用这些转换函数可以将其他类型数据转换成指定的整数类型数据。
【实例】通过转换函数创建整数类型。在命令行窗口中输入以下语句,并查看输出结果。
>> x=126; % 分号;表示不在命令行窗口中显示结果 >> y=126.49; % 定义double型(默认)变量y >> z=126.5; % 定义double型变量z >> xx=int16(x) % 把double型变量x强制转换成int16型 xx = int16 126 >> yy=int32(y) % 把double型变量y强制转换成int32型,y的小数部分被舍去 yy = int32 126 >> zz=int32(z) % 把double型变量z强制转换成int32型,z的小数部分被舍去 zz = int32 127
MATLAB 中还有多种取整函数,可以使用不同的策略把浮点小数转换成整数,如下表所示。
函数 | 说明 | 示例1 | 示例2 |
---|---|---|---|
round(a) |
向最接近的整数取整 小数部分是 0.5 时向绝对值大的方向取整(四舍五入) |
>> round(5.3) ans = 5 |
>> round(5.5) ans = 6 |
fix(a) | 向 0 方向取整 |
>> fix(5.3) ans = 5 |
>> fix(5.5) ans = 5 |
floor(a) | 向不大于 a 的最接近整数取整 |
>> floor(5.3) ans = 5 |
>> floor(5.5) ans = 5 |
ceil(a) | 向不小于 a 的最接近整数取整 |
>> ceil(5.3) ans = 6 |
>> ceil(5.5) ans = 6 |
当两个具有相同的整数类型的数值进行运算时,运算结果仍然是这种整数类型的数值:当一个整数类型数值与一个双精度浮点类型数值进行数学运算时,运算结果是这种整数类型的数值,取整默认采用四舍五入方式。
注意,不同的整数类型数值之间不能进行数学运算,除非提前进行强制转换。
【实例】整数类型数值参与的运算。在命令行窗口中输入以下语句,并查看输出结果。
>> clear % 清除存储空间中的变量 >> x = uint32(350.2) * uint32(10.3) % 将两个 uint32 型数值相乘,自动舍去小数部分 x = uint32 3500 >> y = uint32(36.321) * 320.63 % 将 uint32 型变量与浮点数相乘,自动舍去小数部分 y = uint32 11543 >> z = uint32(50.321) * uint16(420.53) % 不同的整数类型数值之间不能进行数学运算 错误使用 * 整数只能与同类的整数或双精度标量值组合使用 >> whos % 查看当前工作区中的变量信息 Name Size Bytes Class Attributes x 1x1 4 uint32 y 1x1 4 uint32数学运算中,当运算结果超出相应的整数类型能够表示的范围时,就会出现溢出错误,这时运算结果被置为该整数类型能够表示的最大值或最小值。