1樓:匿名使用者
答案:double型別
參考:「隱式型別轉換」
c++定義了一組內建的型別物件之間的標準轉換,在必要時它們被編譯器隱式的應用到物件上。在算式轉換保證了二元操作符,如加法或乘法的兩個運算元被提公升為共同的型別,然後再用它表示結果的型別。兩個通用的指導原則如下:
1、為防止精度損失,如果必要的話,型別總是被提公升為較寬的型別。
2、所有含有小於整形的有序型別的算術表示式在計算之前其型別都會被轉換成整形。
規則的定義如上面所述,這些規則定義了乙個型別轉換層次結構,我們從最寬的型別long double 開始,那麼另乙個運算元無論是什麼型別都將被轉換成long double .如果兩個運算元千不是long double 型,那麼若其中乙個運算元的型別是double 型,則另乙個就被轉換成double 型。例如:
int ival;
float fval;
double dval;
dval + fval + ival //在計算加法前fval和ival都被轉換成double
類似地,如果兩個運算元都不是double型而其中乙個操作float型 ,則另乙個被轉換成float型。例如:
char cval;
int ival;
float fval;
cval + ival + fval //在計算加法前ival和cval都被轉換成float
否則如果兩個運算元都不是3種浮點型別之一,它們一定是某種整值型別。在確定共同的目標提公升型別之前,編譯器將在所有小於int 的整值型別上施加乙個被稱為整值提公升的過程。
在進行整值提公升時型別char、signed char、unsigned char和short int 都被提公升為型別int 。如果機器上的型別空間足夠表示所有unsigned short 型的值,這通常發生在short用半個字而int 用乙個字表示的情況下,則unsigned short int 也被轉換成int 否則它會被提公升為unsigned int 。wchar_t和列舉型別被提公升為能夠表示其底層型別所有值的最小整數型別。
在下列表示式中:
char cval;
bool found;
enum mumbermval;
unsigned long ulong;
cval + ulong;ulong + found; mval + ulong;
在確定兩個運算元被提公升的公共型別之前,cval found 和mval都被提公升為int 型別。
一旦整值提公升執行完畢,型別比較就又一次開始。如果乙個操作是unsigned long 型,則第二個也被轉換成unsigned long 型。在上面的例子中所有被加到ulong上的3個物件都被提公升為unsigned long 型。
如果兩個操作型別都不是unsigned long 而其中乙個操作long型,則另乙個也被轉換成long型。例如:
char cval;
long lval;
cval + 1024 + lval; //在計算加法前cval和1024都被提公升為long型 。
long型別的一般轉換有乙個例外。如果乙個操作long型而另乙個是unsigned int 型,那麼只有機器上的long型的長度足以unsigned int 的所有值時(一般來說,在32位作業系統中long型和int 型都用一長表示,所以不滿足這裡的假設條件),unsigned int 才會被轉換為long型,否則兩個運算元都被提公升為unsigned long 型。若兩個運算元都不是long型而其中乙個是unsigned int 型 ,則另乙個也被轉換成unsigned int 型,否則兩個運算元一定都是int 型。
儘管算術轉換的這些規則帶給你的困惑可能多於啟發,但是一般的思想是盡可能地保留型別表示式中涉及到的值的精度。這下是通過把不同的型別提公升到當前出現的最寬的型別實現的。
2樓:匿名使用者
double
值型別按照運算元裡面範圍大的來取
3樓:
c語言型別轉換分級別,一般多是:
預設狀態:低階向高階轉換,級別高低(小到大):int,float,double,(注意char只可以和int之間轉換);
若要高階向低階轉換:就要用到強制型別轉換符!如int(7.7)=7;
c語言:有定義語句char a;int b;float c;double d;
4樓:夢幻子凝
首先,在c中,資料之間的運算必須是同型別的才能進行運算。如果型別不一致,就必須先轉換成相同的型別----------由低級別 → 高階別轉換。
資料型別級別由低到高分別為:char→int→float→double。轉換時由低級別向高階別轉換。
本題中,資料型別分別為:char型、int型、float型和double型。
按照轉換規則,就要先char轉換為doubl型(因為double級別比char高),int 型轉為double型 ,float型轉為double型, 即全部轉為 double型 再進行運算。 所以,最後的資料型別是double型 。
【注意】不能理解為:先將char轉換成int,再轉換成floatd,再轉換成double。
希望對您有所幫助!
5樓:愛國者搗蛋
都變成了double型的
若有如下定義 int a 1,b 2,c 3執行語句b a4bac之後,c的值是
3。判斷是從左向右,前面的可以判斷的話後面的不執行。表示式a 4值為1,但表示式b 執行後 c 的值是 4 啊 在這個語句裡用的 c 先返回 c 的初始值3 c的值是4,c c c 1 開始c 3,所以c的值是4!設有 int a 1,b 2,c 3,d 4,m 2,n 2 執行 m a b n c...
若有以下定義int m 5,y 2,則計算表示式y y m y後的y值是
y值是bai 16。從左往右分解,y y m y 就是 du y y y m y y m y 就是 y y m y m y 就是 m m y 那麼就等於 m m y m 10,y 2 y y m m 10,y 8 y y y m 10,y 16 擴充套件資料zhi dao 由於字尾表示式不需考慮運算...
C語言,有如下定義intaa不是定義二維陣列a麼,又定
其實pa是乙個指向 包含 復3個元製素的 一維陣列的指標,因此可以指向任何乙個包含3個元素的一維陣列 而a 2 3 是二維陣列,可以看作是由a 0 和a 1 兩個包含三個元素的一維陣列組成,如a 0 就可以認為是包含a 0 0 a 0 1 a 0 2 三個元素的一維陣列a 0 這樣就可以理解pa a...