4.7 Automatic Conversion of Data Types

Last-modified: 2025-03-20 (木) 20:30:30

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は倍精度型です。