スポンサーリンク
※サイト運営にサーバーは必須です※
~ ロリポップ! はコスパのよい初心者向けサーバーです~
目次
暗黙的な型変換とは?明示的な型変換とは?
型変換には、2つのタイプに分類することができます
暗黙的な型変換
暗黙的な型変換とは、コンパイラー側が適切な型を判断して、型変換をしてくれることを意味します。
例えば、値の範囲が異なるデータ型で、四則算を行った場合、値の範囲の大きい型に、自動的に変換されます。
具体的には、int型の数値とdouble型の数値が掛け算をした場合、その値はdouble型として、暗黙的に型変換が行われます。
double n = 3 * 2.5;
このように、暗黙的な型変換が行われるときは、データが失われないように考慮されています。
たとえ、掛け算の結果が整数であってもint型であるとコンパイラーは判断してくれません。
以下のようなコードはエラーになります。(演算の結果が10という整数であっても)
int n = 4 * 2.5;
明示的な型変換(キャスト)
明示的な型変換とは、変換したい型を明示して、型変換することを意味します。
キャスト演算子()を使って、変換したい型を決定します。
キャスト演算子を使えば、アップキャスト(拡大変換)はもちろん、ダウンキャスト(縮小変換)も行えます。
扱う値の範囲が狭くなるダウンキャストを行う場合、情報が失われる可能性があります。
例えば、以下のようにint型の3とdouble型の2.4を掛け算した場合は、double型の7.2になります。
int d = (int)( 3 * 2.4);
ここで、キャスト演算子(int)を使うことで、int型に強制的に変換しています。そのためdに入る値は7.2ではなく7になります。
そのため、明示的な型変換を行う場合は、小数点の情報や符号の情報が失われる危険性があります。
※小数点以下の値は、切り捨てで評価されます。四捨五入ではありません。
※キャストという言葉は、広い意味では、「型変換」を指します。狭い意味では「明示的な型変換」を指します。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Cast02 { class Program { static void Main(string[] args) { int a = 3; double b = 2.4; //エラー //int c = a * b; double c = a * b;//暗黙的な型変換 Console.WriteLine("cの値は" + c); int d = (int)(a * b);//明示的な型変換 Console.WriteLine("dの値は" + d); int e = a * (int)b;//明示的な型変換 Console.WriteLine("eの値は" + e); } } } |
実行結果
cの値は7.2
dの値は7
eの値は6
キャストしたい部分を()でくくります。カッコのくくる範囲で結果が変わることがあります。
dの場合は、2.4×3=7.2を計算した後に、int型に変換しているので、7になります。
eの場合は、bの値である2.4を整数の2に変換した後、3をかけているので、6になります。
関連記事
~ギャンブルに絶対儲かる必勝法があるのだろうか?~
私(サイト主)はこの疑問に対して非常に興味を持ち、プログラミングで検証してみました。
このサイトを応援してもいいかなと思う人はぜひとも購入を検討してみてください。