-5

重複の可能性:
暗黙的キャストと明示的キャストを特定する

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;
4

3 に答える 3

1

情報の損失がない場合、コンパイラはデータ型をプロモートします。

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

于 2010-03-16T05:44:34.667 に答える
1

暗黙のキャスト: real_result = a * f;

明示的なキャスト: real_result = (int)(a * f);


あなたの投稿で式の 1 つを説明します。
Expression: real_result = a * f;

  1. intからaをキャスト-> double
  2. 計算結果: a * f
  3. a * fの結果をdoubleからintにキャストし、結果をreal_resultに設定します

  1. real_result の型がintであるため、 a*f (double) の結果を格納するには小さすぎる可能性があります -> プログラムに論理エラーがある可能性があります (情報の損失)。

  2. 一部のコンパイラは、論理エラーについての警告を表示します。式の論理に確信がある場合は、明示的なキャストを使用してこの警告を中止するようコンパイラに指示できます:
    real_result = (int)(a * f);

于 2010-03-16T10:02:39.820 に答える
0

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 の値をキャストするため

大きなデータ型の値をそれより小さいデータ型にキャストするときに、精度がいくらか失われます。

于 2010-03-17T07:34:32.487 に答える