许多运算符和函数可以使用混合数据类型。例如
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-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2