Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

整数

整数クラス

MATLAB®には、4 種類の符号付きおよび符号なしの整数クラスがあります。符号付きの型を使うと、正の整数だけでなく負の整数も扱うことができますが、数値の正と負の符号を指定するために 1 ビットを使用するため、符号なしの型のように広範な数値を網羅することはできません。符号なしの型を使うと数値範囲は広くなりますが、ゼロまたは正の数値しか扱えません。

MATLAB では、整数データの保存に対し 1、2、4、8 バイトがサポートされています。データの処理に最小の整数型を使用すれば、メモリ消費量と実行時間を削減できます。たとえば、値100を保存するためには 32 ビットの整数は必要ありません。

8 つの整数クラス、各型で保存可能な値の範囲、その型を作成するために必要な MATLAB 変換関数を以下に示します。

クラス

値の範囲

変換関数

符号付き 8 ビット整数

-27~ 27-1

int8

符号付き 16 ビット整数

-215~ 215-1

int16

符号付き 32 ビット整数

-231~ 231-1

int32

符号付き 64 ビット整数

-263~ 263-1

int64

符号なし 8 ビット整数

0 ~ 28-1

uint8

符号なし 16 ビット整数

0 ~ 216-1

uint16

符号なし 32 ビット整数

0 ~ 232-1

uint32

符号なし 64 ビット整数

0 ~ 264-1

uint64

整数データの作成

MATLAB では既定で、数値データが倍精度浮動小数点 (double) として保存されます。データを整数として保存するには、doubleから希望する整数型に変換しなければなりません。上記の表に示した変換関数のいずれかを使用します。

たとえば、325を変数xに割り当て、16 ビット符号付き整数として保存するには、次のように入力します。

x = int16(325);

整数に変換される数値が小数部分をもつ場合は、最も近い整数に丸められます。小数部分がちょうど0.5である場合は、等距離にある 2 つの整数から、絶対値の大きい方の整数が選択されます。

x = 325.499; int16(x) ans = int16 325 x = x + .001; int16(x) ans = int16 326

既定の方法以外で、数値を丸める必要がある場合、MATLAB では 4 つの丸め関数、roundfixfloorceilが提供されています。ゼロでない小数部がある場合は、関数fixによって既定の方法がオーバーライドされ、"ゼロ方向"に丸められます。

x = 325.9; int16(fix(x)) ans = int16 325

整数と浮動小数点の両方を含む算術演算の結果は、常に、整数データ型になります。MATLAB では、必要な場合、既定の丸めアルゴリズムに従って結果を丸めます。次の例は、厳密な答え1426.75を出した後に、次に最も大きい整数に丸めています。

int16(325) * 4.39 ans = int16 1427

変換関数は,文字列などのその他のクラスを整数に変換する場合にも便利です。

str = 'Hello World'; int8(str) ans = 1×11 int8 row vector 72 101 108 108 111 32 87 111 114 108 100

NaN値を整数クラスに変換すると、結果はその整数クラスの0の値です。たとえば、次のようになります。

int32(NaN) ans = int32 0

整数クラスの算術演算

MATLAB では、次のデータ型に対して整数の算術演算を実行できます。

  • 同じ整数データ型をもつ、整数あるいは整数配列。この場合、結果はオペランドと同じデータ型をもちます。

    x = uint32([132 347 528]) .* uint32(75); class(x) ans = uint32
  • 整数あるいは整数配列と、スカラー倍精度浮動小数点数。この場合、結果は整数オペランドと同じデータ型をもちます。

    x = uint32([132 347 528]) .* 75.49; class(x) ans = uint32

二項演算で、一方のオペランドが整数データ型 (ただし、64 ビット整数以外) の配列で、他方のオペランドがスカラー double である場合、MATLAB では、要素単位の倍精度算術演算を行った後、結果がオリジナルの整数データ型に変換されます。二項演算で、64 ビット整数の配列とスカラー double を使用する場合、MATLAB では、80 ビット拡張精度算術であるかのように演算して精度を失わないようにします。

整数型の複素数を含む演算はサポートされていません。

整数クラスの最大値と最小値

各整数データ型には、データ型で表現できる最大整数値と最小整数値があります。整数の表の「数値範囲」列に、各整数データ型の最大値と最小値がリストされています。

これらの値は、関数intmaxと関数intminを使用しても得ることができます。

intmax('int8') ans = int8 127 intmin('int8') ans = int8 -128

整数データ型の最大値よりも大きい数をこのデータ型に変換する場合、MATLAB では値が最大値に設定されます。同様に、整数データ型の最小値よりも小さい数を変換する場合は、MATLAB によって最小値に設定されます。たとえば、次のようになります。

x = int8(300) x = int8 127 x = int8(-300) x = int8 -128

また、整数を含む算術演算の結果が、データ型の最大 (あるいは最小) 値を超える場合、MATLAB では結果が最大 (あるいは最小) 値に設定されます。

x = int8(100) * 3 x = int8 127 x = int8(-100) * 3 x = int8 -128