2010-03-16 74 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 2010-03-16 02:23:10

+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 2010-03-16 02:46:36

+0

我已經更新了代碼和標題,但我仍然不清楚你的問題是什麼。此外,您可以編輯自己的問題以添加所需的任何新信息。 – 2010-03-16 03:06:08

回答

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 = A * F;

明確演員表:real_result =(int)(a * f);


我會解釋表達的一個在您的文章:
表達:REAL_RESULT = A * F;

  1. 角色一個INT - >
  2. 計算結果:INT一個* F鑄造結果的一個* F
  3. 然後將結果設置爲real_result

  1. 因爲REAL_RESULT的類型是INT可能是小的結果存儲到一個* F(雙) - >你可能在你的程序(損失有一個邏輯錯誤信息)。

  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;

您無法實施隱式轉換。隱式轉換由編譯器實現。

要小心,同時實施明確的演員。因爲在顯式強制轉換變量me的值時,將大數據類型值轉換爲小於它的數據類型時會失去某種精度。