ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

異なる整数型の組み合わせ

概要

異なる整数型 (たとえば、符号付きと符号なし、あるいは 8 ビット整数と 16 ビット整数) を組み合わせて行列にする場合、MATLAB® が返す出力行列の要素はすべて、1 つの共通のタイプになります。MATLAB では、結果の行列のすべての要素が、入力行列の最も左側の要素のデータ型に設定されます。たとえば、以下の連結の結果は、3 つの 16 ビット符号付き整数のベクトルになります。

A = [int16(450) uint8(250) int32(1000000)]

MATLAB では、結果が予想していたものと異なる可能性がある旨の警告も表示されます。

A = [int16(450) uint8(250) int32(1000000)];
Warning: Concatenation with dominant (left-most) integer class 
may overflow other operands on conversion to return class.

警告の原因となった操作の直後に、次の 2 つのコマンドを入力することでこの警告を非表示にできます。最初のコマンドは、MATLAB が与えた最も最近の警告に関連するメッセージ識別子を取得します。2 つ目のコマンドは、この識別子を使用して、そのタイプの警告が表示されないようにします。

[msg, intcat_msgid] = lastwarn;
warning('off', intcat_msgid);

この警告を再び有効にして表示するには、次を使用します。

warning('on', intcat_msgid);

これらのコマンドを使用して、MATLAB の警告を表示または非表示にできます。

異なる整数サイズを組み合わせる例

上記のように整数の連結の警告を非表示にしてから、次の 2 つの数を連結してその順序を交換します。出力値は、整数を連結する順序によって変わります。最も左側のデータ型によって、ベクトルのすべての要素のデータ型が決定されます。

A = [int16(5000) int8(50)]
A =
   5000   50

B = [int8(50) int16(5000)]
B =
   50   127

最初の操作は、16 ビット整数のベクトルを出力します。2 つ目の操作は、8 ビット整数のベクトルを出力します。要素 int16(5000) は、8 ビット符号付き整数の最大値 127 に設定されます。

縦方向の連結に対しても同様の規則が適用されます。

C = [int8(50); int16(5000)]
C =
    50
   127

    メモ:   関数 intmaxintmin を使用して、MATLAB 整数型の最大値、最小値を見つけることができます。浮動小数点タイプの場合、realmaxrealmin を使用します。

符号付き整数を符号なし整数と組み合わせる例

ここでは、符号付き整数と符号なし整数に対して同じ操作を行います。ここでも、最も左側の要素によって、結果の行列のすべての要素のデータ型が決定されます。

A = [int8(-100) uint8(100)]
A =
   -100   100

B = [uint8(100) int8(-100)]
B =
   100   0

要素 int8(-100) は、符号付きではなくなるのでゼロに設定されます。

MATLAB では、各要素を配列に連結する "前に"、各要素が評価されます。つまり、次のステートメントでは、2 つの要素が連結される前に 8 ビット符号付き整数 (50 に等しい) と 8 ビット符号なし整数 (符号なしの -50 はゼロに設定される) に評価されます。連結後、2 つ目の要素ではゼロ値が保持されますが、符号なしの int8 型になります。

A = [int8(50), uint8(-50)]
A =
  50    0
この情報は役に立ちましたか?