3.1 内置数据类型

标准的内置数据类型是实数和复数的标量和矩阵、范围、字符串、数据结构类型和元胞数组。在未来的版本中可能会添加其他内置数据类型。如果您需要一个当前未作为内置类型提供的专用数据类型,我们鼓励您编写自己的用户定义数据类型,并将其贡献给 Octave 的未来版本。

变量的数据类型可以通过使用以下函数来确定和更改。

 
classname = class (obj)
cls = class (s, classname)
cls = class (s, classname, parent1, …)

返回对象 obj 的类名,或使用结构体 s 中的字段创建一个名称为 classname(字符串)的类。

附加参数命名了派生新类的父类列表。

另请参阅: typeinfo, isa.

 
tf = isa (obj, classname)

如果返回 true,则 objclassname 类中的对象。

classname 也可以是以下类别之一:

"float"

包含浮点值,类型为 "double""single"

"integer"

整数值,包括类型 (u)int8、(u)int16、(u)int32 和 (u)int64。

"numeric"

包含浮点值或整数值的数值。

如果 classname 是字符串元胞数组,则返回相同大小的逻辑数组,其中每个元素表示 obj 是否属于相应类。

另请参阅: class, typeinfo.

 
y = cast (x, "type")
y = cast (x, "like", var)

x 转换为数据类型 type

输入 x 可以是可转换为目标类的标量、向量或矩阵(见下文)。

如果在 "like" 之后指定了变量 var,则 x 被转换为相同的数据类型和稀疏性属性。如果 var 是复数,x 也会是复数。

vartype 可以是以下任一内置数值类:

"double"
"single"
"logical"
"char"
"int8"
"int16"
"int32"
"int64"
"uint8"
"uint16"
"uint32"
"uint64"

x 可以被修改以适应新类型的范围。

示例:

cast (-5, "uint8")
   ⇒    0
cast (300, "int8")
   ⇒    127

编程注意事项:此函数依赖于对象 x 中名为 type 的转换方法。用户定义的类可以仅实现上面所示的完整类型列表的子集。在这种情况下,为了达到所需的类型,可能需要调用两次强制转换。例如,几乎总是实现到 double 的转换,但可能不会实现到 uint8 的转换。在这种情况下,以下代码将起作用:

cast (cast (user_defined_val, "double"), "uint8")

另请参阅: typecast, int8, uint8, int16, uint16, int32, uint32, int64, uint64, double, single, logical, char, class, typeinfo.

 
y = typecast (x, "class")

返回一个新数组 y,该数组通过将 x 在内存中的数据解释为数值类 class 的数据而得到。

xclass 都必须属于内置数值类之一:

"logical"
"char"
"int8"
"int16"
"int32"
"int64"
"uint8"
"uint16"
"uint32"
"uint64"
"double"
"single"
"double complex"
"single complex"

最后两个仅用于 class;它们表示请求复数结果。复数数组在内存中存储为连续的实数对。整数类型的大小由其位数决定。逻辑和字符通常都是一个字节宽;然而,C++ 并不能保证这一点。如果您的系统符合 IEEE 754 标准,则 single 和 double 的宽度分别为 4 字节和 8 字节。"logical" 不允许用于 class

如果输入是行向量,则返回值是行向量;否则返回值是列向量。

如果 x 的位长度不能被 class 的位长度整除,则报错。

在小端机器上使用 typecast 的一个例子是

x = uint16 ([1, 65535]);
typecast (x, "uint8")
⇒   [   1,   0, 255, 255]

另请参阅: cast, bitpack, bitunpack, swapbytes.

 
y = swapbytes (x)

交换值的字节顺序,从小端到大端转换,反之亦然。

例如

swapbytes (uint16 (1:4))
⇒    256   512   768  1024

另请参阅: typecast, cast.

 
y = bitpack (x, class)

返回一个新数组 y,该数组通过将逻辑数组 x 解释为数值类 class 的数据的原始位模式而得到。

class 必须是内置数值类之一:

"double"
"single"
"double complex"
"single complex"
"char"
"int8"
"int16"
"int32"
"int64"
"uint8"
"uint16"
"uint32"
"uint64"

x 的元素数量应该可以被 class 的位长度整除。如果不能,则丢弃多余的位。位按递增顺序出现,即 x(1) 是位 0,x(2) 是位 1,以此类推。

结果是行向量,如果 x 是行向量;否则是列向量。

另请参阅: bitunpack, typecast.

 
y = bitunpack (x)

返回与 x 的原始位模式对应的逻辑数组 y

x 必须属于内置数值类之一:

"double"
"single"
"char"
"int8"
"int16"
"int32"
"int64"
"uint8"
"uint16"
"uint32"
"uint64"

结果是行向量,如果 x 是行向量;否则是列向量。

另请参阅: bitpack, typecast.


版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2