重複の可能性:
暗黙的キャストと明示的キャストを特定する
int a = 2, b = 3;
float f = 2.5;
double d = -1.2;
int int_result;
float real_result;
real_result = a * f;
real_result = (float) a * b;
d = a + b / a * f;
d = f * b / a + a;
重複の可能性:
暗黙的キャストと明示的キャストを特定する
int a = 2, b = 3;
float f = 2.5;
double d = -1.2;
int int_result;
float real_result;
real_result = a * f;
real_result = (float) a * b;
d = a + b / a * f;
d = f * b / a + a;
情報の損失がない場合、コンパイラはデータ型をプロモートします。
int a=3;
float b=a; //b=3.0f
情報が失われた場合、コンパイラは警告とともに降格する必要があります。
float b=4.3;
int a=b; //a=4
[
short a=2000;
int b;
b = (int) a; // c-like cast notation
b = int (a); // functional notation
] 1
暗黙のキャスト: real_result = a * f;
明示的なキャスト: real_result = (int)(a * f);
あなたの投稿で式の 1 つを説明します。
Expression: real_result = a * f;
real_result の型がintであるため、 a*f (double) の結果を格納するには小さすぎる可能性があります -> プログラムに論理エラーがある可能性があります (情報の損失)。
一部のコンパイラは、論理エラーについての警告を表示します。式の論理に確信がある場合は、明示的なキャストを使用してこの警告を中止するようコンパイラに指示できます:
real_result = (int)(a * f);
int a = 2、b = 3;
フロート f = 2.5;
ダブルd = -1.2;
int int_result;
float real_result;
real_result = a * f; /* ここで、暗黙のキャストがコンパイラによって変数 a に適用されます。変数 a は最初に暗黙的に float に昇格され、次に式が実行されます。*/ real_result = (float) a * b; /* これは明示的なキャストです。ここでは、a*b の結果を強制的に float に変換しています。*/
d = a + b / a * f;
d = f * b / a + a;
暗黙のキャストを実装することはできません。暗黙のキャストは、コンパイラによって実装されます。
明示的なキャストを実装するときは注意してください。Explicit では変数 me の値をキャストするため
大きなデータ型の値をそれより小さいデータ型にキャストするときに、精度がいくらか失われます。