組み込み型の型変換

数値型同士の変換

暗黙的な型変換

プログラミングでは様々なデータ型を扱うので、時には別のデータ型同士の演算を行うこともあります。


short shortNum = 10;
int intNum = shortNum;

short型とint型とではint型のほうが扱える数値の幅が広いので、上記のような代入は問題なく行えます。
このとき、変数shortNumの値は自動的にint型に変換されて代入されます。
このような変換を暗黙的な型変換といいます。

ではこれを逆にするとどうでしょうか。


int intNum = 10;
short shortNum = intNum; //←エラー

このコードはエラーになります。
変数intNumの中身はshort型でも扱える「10」という値ですが、実際の値に関係なく、扱えるデータ幅の大きいほうから小さいほうへの代入はC#では許されていません。

明示的な型変換(キャスト)

上記のような代入をするには明示的な型変換(キャスト)を行います。


int intNum = 10;

//int型変数をshort型に変換(キャスト)
short shortNum = (short)intNum;

変換したい値の前に丸括弧を書き、目的のデータ型名を記述します。
これをキャスト演算子といいます。
キャスト演算子を使用すると、変数intNumは一時的にshort型として扱われます。
値はshort型に変換されているので、short型変数shortNumに値を代入可能となります。

ただし変換前の値が変換後のデータ型で扱える範囲以上だった場合、オーバーフローが発生することに注意してください。

整数型から実数型への変換

整数型から実数型(小数型)への代入は、キャストなしでそのまま行えますが、精度の問題でデータの変化が生じる可能性があります。


int intMax = int.MaxValue;
float f = intMax;

Console.WriteLine(intMax);
Console.WriteLine("{0:f}",  f);
2147483647
2147484000.00

実数型から整数型への変換

実数型から整数型への代入はキャストが必要です。
この時、小数点以下は切り捨てられます。


float f = 1234.56f;
int i = (int)f;

Console.WriteLine(f);
Console.WriteLine(i);
1234.56
1234

整数型同士の除算で小数点以下を得る

int型などの整数型同士の演算はint型として計算されます。
(サイズがint型以下のデータ型の場合。long型が含まれる場合はlong型で計算される)
除算(割り算)もint型で行われるので、計算結果から小数以下は切り捨てられてしまいます。
小数以下の値も必要な場合はdouble型などの実数型にキャストしてから計算します。


int num1 = 25;
int num2 = 2;

//これはダメ
//double real = num1 / num2;

double real = (double)num1 / num2;

どちらか一方が実数型であれば良いので、キャストするのは片方だけで構いません。

参照型のキャスト

参照型変数の場合にはもうひとつキャスト方法があります。
詳しくは参照型変数のキャストで説明します。

文字列型、数値型、bool型の相互変換

文字列型、数値型、bool型の変換についてはデータ型の相互変換を参照してください。