2010-03-16 4 views
-5

Possible en double:
Identify the implicit cast and explicit castComment utiliser les distributions implicites et explicites?

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

Pourriez-vous nous donner plus de détails sur ce que vous essayez de faire? Quel est le résultat final supposé être, ou quelles sont les variables? – Tarka

+0

voici une correction: et c'est un travail à domicile int a = 2, b = 3; flotteur f = 2,5; double d = -1,2; dans 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

J'ai mis à jour le code et le titre, mais je ne sais toujours pas quelle est votre question. En outre, vous pouvez modifier votre propre question pour ajouter toute nouvelle information que vous voulez. –

Répondre

1

S'il n'y a aucune perte d'information le compilateur favorisera votre type de données:

int a=3; 
float b=a; //b=3.0f 

S'il y a une perte d'informations que le compilateur devrait rétrograder avec un avertissement:

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

cast implicite: REAL_RESULT = a * f;

Coulée explicite: real_result = (int) (a * f);


Je vais vous expliquer une expression dans votre message:
Expression: REAL_RESULT = a * f;

  1. Cast un de int ->à double
  2. résultat de Calcul de: a * f
  3. résultat Cast de a * f de deux à int puis définissez le résultat sur real_result

  1. Parce que le type de REAL_RESULT est int peut être à petit pour résultat de magasin de a * f (double) -> vous pouvez avoir une erreur de logique dans votre programme (perte de information).

  2. Certains compilateurs afficheront un avertissement à l'avis de votre sur l'erreur logique, si vous êtes sûr de la logique de votre expression, vous pouvez dire au compilateur d'annuler cet avertissement en utilisant un casting explicite:
    REAL_RESULT = (int) (a * f);

0

int a = 2, b = 3;

flotteur f = 2,5;

double d = -1.2;

int int_result;

float real_result;

real_result = a * f;/* La distribution implicite est appliquée par le compilateur à la variable a. Où la variable a est d'abord promue pour flotter implicitement, puis l'expression est exécutée. */ real_result = (flottant) a * b;/* Ceci est un casting explicite. Ici, vous convertissez de force le résultat de a * b en flottant. */

d = a + b/a * f;

d = f * b/a + a;

Vous ne pouvez pas implémenter un transtypage implicite. La distribution implicite est implémentée par le compilateur.

Attention lors de l'implémentation de la distribution explicite. Parce que dans Explicit cast la valeur de la variable me

perdu avec une certaine précision tout en coulant de grande valeur de type de données aux types de données moins que lui.

Questions connexes