许多运算符和函数可以使用混合数据类型。例如
uint8 (1) + 1 ⇒ 2
single (1) + 1 ⇒ 2
min (single (1), 0) ⇒ 0
其中结果分别为uint8、single和single类型。这是为了MATLAB兼容性。有效的混合运算定义如下:
混合运算 | 结果 | ||
---|---|---|---|
double OP single | single | ||
double OP integer | integer | ||
double OP char | double | ||
double OP logical | double | ||
single OP integer | integer | ||
single OP char | single | ||
single OP logical | single |
当函数需要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号