本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

整数

整数类

MATLAB® 具有四个有符号整数类和四个无符号整数类。有符号类型使您能够处理负整数以及正整数,但表示的数字范围不如无符号类型广泛,因为有一个位用于指定数字的正号或负号。无符号类型提供了更广泛的数字范围,但这些数字只能为零或正数。

MATLAB 支持以 1 字节、2 字节、4 字节和 8 字节几种形式存储整数数据。如果您使用可容纳您的数据的最小整数类型来存储数据,则可以节省程序内存和执行时间。例如,您不需要使用 32 位整数来存储值 100

下面列出了八个整数类、使用每种类型可存储的值范围以及创建该类型所需的 MATLAB 转换函数:

值的范围

转换函数

有符号 8 位整数

-27 到 27-1

int8

有符号 16 位整数

-215 到 215-1

int16

有符号 32 位整数

-231 到 231-1

int32

有符号 64 位整数

-263 到 263-1

int64

无符号 8 位整数

0 到 28-1

uint8

无符号 16 位整数

0 到 216-1

uint16

无符号 32 位整数

0 到 232-1

uint32

无符号 64 位整数

0 到 264-1

uint64

创建整数数据

MATLAB 默认情况下以双精度浮点形式 (double) 存储数值数据。要以整数形式存储数据,您需要从 double 转换为所需的整数类型。使用上表中所示的转换函数之一。

例如,如果要以 16 位有符号整数形式存储赋给变量 x 的值 325,请键入

x = int16(325);

如果要转换为整数的数值带有小数部分,MATLAB 将舍入到最接近的整数。如果小数部分正好是 0.5,则 MATLAB 会从两个同样临近的整数中选择绝对值大小更大的整数:

x = 325.499;
int16(x)
ans =
	
  int16

   325         

x = x + .001;
int16(x)
ans =

  int16

   326                                      

如果您需要使用非默认舍入方案对数值进行舍入,MATLAB 提供了以下四种舍入函数:roundfixfloorceilfix 函数使您能够覆盖默认的舍入方案,并朝零舍入(如果存在非零的小数部分):

x = 325.9;

int16(fix(x))
ans =

  int16

   325

同时涉及整数和浮点数的算术运算始终生成整数数据类型。MATLAB 会在必要时根据默认的舍入算法对结果进行舍入。以下示例生成 1426.75 的确切答案,然后 MATLAB 将该数值舍入到下一个最高的整数:

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

如果您将 NaN 值转换为整数类,则结果为该整数类中的 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

   127

x = int8(-100) * 3
x =

  int8

   -128