4.7 データ型の自動変換¶
多くの演算子と関数は、混合データ型で動作します。たとえば、
uint8 (1) + 1 ⇒ 2
single (1) + 1 ⇒ 2
min (single (1), 0) ⇒ 0
結果はそれぞれ uint8、single、single 型になります。これはMATLAB との互換性のために行われます。有効な混合演算は次のように定義されます。
Mixed Operation Result 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'
2 つのオペランドが両方とも整数だが幅が異なる場合、場合によってはより広いビット幅に変換され、場合によってはエラーがスローされます。
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
2 つの整数オペランドの場合、通常は両方とも符号付きか、両方とも符号なしである必要があります。符号付きと符号なしを混在させると、同じビット幅であってもエラーが発生することがよくあります。
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は倍精度型です。