文档

整数

整数类

MATLAB®有四个有符号和四个无符号整数类。有符号类型使您可以处理正整数,也可以处理正整数,但不能像无符号类型那样表示广泛的数字范围,因为使用一位来指定数字的正号或负号。无符号类型提供了更大范围的数字,但这些数字只能是零或正的。

MATLAB支万博1manbetx持整数数据的1、2、4和8字节存储。如果使用容纳数据的最小整数类型,则可以节省程序的内存和执行时间。例如,不需要32位整数来存储该值One hundred.

以下是8个整数类,每种类型可以存储的值范围,以及创建该类型所需的MATLAB转换函数:

范围的值

转换函数

签署了8位整数

-27到27-1

int8

签署了16位整数

-215到215-1

int16

签署了32位整数

-231到231-1

int32

签署了64位整数

-263到263-1

int64

Unsigned 8位整数

0到28-1

uint8

16位无符号整数

0到216-1

uint16

32位无符号整数

0到232-1

uint32

未签名的64位整数

0到264-1

uint64

创建整数数据

MATLAB将数字数据存储为双精度浮点数(默认情况下)。要将数据存储为整数,需要进行转换转换为所需的整数类型。使用上表中所示的转换函数之一。

例如,存储325赋给变量的16位有符号整数x、类型

x = int16 (325);

如果要转换为整数的数字有小数部分,MATLAB四舍五入到最接近的整数。如果小数部分是精确的0.5, MATLAB从两个等近的整数中选择绝对值较大的一个:

x = 325.499;Int16 (x) ans = Int16 325 x = x + .001;Int16 (x) ans = Int16 326

如果你需要使用非默认的舍入方案来舍入一个数字,MATLAB提供了四个舍入函数:修复地板上,装天花板.的修复功能使您可以覆盖默认和轮询为零当存在非零小数部分时:

x = 325.9;Int16 (fix(x)) ans = Int16 325

同时涉及整数和浮点数的算术操作总是得到整数数据类型。MATLAB在必要时根据默认的舍入算法对结果进行四舍五入。下面的例子给出了一个确切的答案1426.75MATLAB将其四舍五入到下一个最高整数:

Int16 (325) * 4.39 ans = Int16 1427

整数转换函数在将其他类(如字符串)转换为整数时也很有用:

str = 'Hello World';Int8 (str) ans = 1×11 Int8 row vector 72 101 108 108 111 32 87 111 114 108 100

如果你转换值转换为整数类,结果是值0在那个整数类中。例如,

int32(NaN) ans = int32 0

整数类的算术运算

MATLAB可以对以下类型的数据进行整数运算:

  • 相同整型数据类型的整型或整型数组。这将产生与操作数相同的数据类型的结果:

    X = uint32([132 347 528]) .* uint32(75);Class (x) ans = uint32
  • 整数或整数数组和标量双精度浮点数。这将产生与整数操作数相同的数据类型的结果:

    X = uint32([132 347 528]) .* 75.49;Class (x) ans = uint32

对于所有二进制操作,其中一个操作数是整数数据类型的数组(除了64位整数),另一个操作数是标量双精度,MATLAB使用元素双精度算法计算操作,然后将结果转换回原始的整数数据类型。对于涉及64位整数数组和标量双精度的二进制操作,MATLAB计算该操作就像使用80位扩展精度算法一样,以防止精度的损失。

整数类的最大和最小值

对于每个整数数据类型,都有可以用该类型表示的最大和最小数字。下表所示整数在“值的范围”列中列出每个整数数据类型的最大和最小值。

属性也可以获得这些值intmaxintmin功能:

Intmax ('int8') ans = int8 127 intmin('int8') ans = int8 -128

如果将大于整数数据类型最大值的数字转换为该类型,MATLAB将其设置为最大值。类似地,如果转换的数字小于整数数据类型的最小值,MATLAB会将其设置为最小值。例如,

X = int8(300) X = int8 127 X = int8(-300) X = int8 -128

此外,当涉及整数的算术运算的结果超过数据类型的最大值(或最小值)时,MATLAB将其设置为最大值(或最小值):

X = int8(100) * 3 X = int8(-100) * 3 X = int8 -128
这个话题有用吗?