2010-03-16 4 views
-5

Можно создать дубликат:
Identify the implicit cast and explicit castКак использовать неявные и явные приведения?

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;
+0

Не могли бы вы дать нам более подробную информацию о том, что вы пытаетесь сделать? Каким должен быть конечный результат или какая из этих переменных? – Tarka

+0

вот исправление: и это домашняя работа int a = 2, b = 3; float f = 2.5; double d = -1.2; in tint_result; float real_result; (1) real_result = a * f; (2) real_result = (float) a * b; (3) d = a + b/a * f; (4) d = f * b/a + a; – user292489

+0

Я обновил код и заголовок, но до сих пор неясно, в чем заключается ваш вопрос. Кроме того, вы можете отредактировать свой собственный вопрос, чтобы добавить любую новую информацию, которую вы хотите. –

ответ

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

1

Неявные литой: real_result = а * е;

Явный: real_result = (int) (a * f);


поясню один из выражения в своем сообщении:
Expression: real_result = а * п;

  1. В ролях из INT ->двойной результат
  2. Рассчитайте из: а * ф
  3. результат Cast из а * ф из двойной к ИНТ then set result to real_result

  1. Поскольку тип real_result является INT может быть малым для хранения результата а * е (двойной) -> вы можете иметь логическую ошибку в вашей программе (потеря Информация).

  2. Некоторые компиляторы будут отображаться предупреждение заметить ваше о логической ошибке, если вы уверены в логике вашего выражения, вы можете сказать компилятору, чтобы отменить это предупреждение, используя явное приведение типов:
    real_result = (int) (a * f);

0

int a = 2, b = 3;

float f = 2.5;

double d = -1.2;

int int_result;

float real_result;

real_result = a * f;/* Здесь неявный листинг применяется компилятором к переменной a. Когда переменная a сначала продвигается, чтобы плавать неявно, а затем выражение выполняется. */ real_result = (float) a * b;/* Это явное приведение. Здесь вы принудительно преобразуете результат a * b в float. */

d = a + b/a * f;

d = f * b/a + a;

Вы не можете реализовать неявное преобразование. Неявный перевод выполняется компилятором.

Остерегайтесь при реализации явного приведения. Потому что в Explicit литье значение переменной me

потеряно с некоторой точностью при отливке большого значения datatype к этим типам данных.