4.7数据类型的自动转换

许多运算符和函数可以使用混合数据类型。例如

uint8 (1) + 1
    ⇒ 2

single (1) + 1
    ⇒ 2

min (single (1), 0)
   ⇒ 0

其中结果分别为uint8、single和single类型。这是为了MATLAB兼容性。有效的混合运算定义如下:

混合运算 结果
double OP singlesingle
double OP integerinteger
double OP chardouble
double OP logicaldouble
single OP integerinteger
single OP charsingle
single OP logicalsingle

当函数需要double但传递给其他类型时,自动转换取决于函数:

a = det (int8 ([1 2; 3 4]))
    ⇒ a = -2
class (a)
    ⇒ double

a = eig (int8 ([1 2; 3 4]))
    ⇒ error: eig: wrong type argument 'int8 matrix'

当两个操作数都是整数但宽度不同时,某些情况会将它们转换为较宽的位宽,而其他情况则会引发错误:

a = min (int8 (100), int16 (200))
    ⇒ 100
class (a)
    ⇒ int16

int8 (100) + int16 (200)
   ⇒ error: binary operator '+' not implemented
   for 'int8 scalar' by 'int16 scalar' operations

对于两个整数操作数,它们通常都需要有符号或都是无符号的。混合有符号和无符号通常会导致错误,即使它们的位宽相同。

min (int16 (100), uint16 (200))
   ⇒ error: min: cannot compute min (int16 scalar, uint16 scalar)

在混合类型索引赋值的情况下,不更改类型。例如

x = ones (2, 2);
x(1, 1) = single (2)
   ⇒ x = 2   1
          1   1

这里的x还是双精度类型。


版权所有 © 2024 Octave中文网

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