c語言把int轉(zhuǎn)化為float會四舍五入么?
它只取整數(shù)部分。就是可能是1.999999999然后轉(zhuǎn)換成int,也就是1,所以浮點數(shù)轉(zhuǎn)換成int會失去精度。為了避免這種情況,建議如果想得到整數(shù)部分。可以用floatbintaaa(B0.5),意思是四舍五入。如果寫成ab,可能會出現(xiàn)0.99999999999被截斷,A為0的情況。
C語言能自動轉(zhuǎn)換的數(shù)據(jù)類型?
C語言中的自動類型轉(zhuǎn)換
如果在同一個語句或表達(dá)式中使用了多種類型的變量和常量(混合類型),C會自動將它們轉(zhuǎn)換成相同的類型。以下是自動類型轉(zhuǎn)換的基本規(guī)則:
1.在表達(dá)式中,char和short的值,不管是有符號的還是無符號的,都會自動轉(zhuǎn)換為int或無符號int(如果short的大小與int相同,則無符號short的表示范圍大于int,這種情況下,無符號short轉(zhuǎn)換為無符號int)。因為它們被轉(zhuǎn)換成代表更大范圍的類型,所以這種轉(zhuǎn)換被稱為"推廣與宣傳。
2.將各種數(shù)據(jù)類型從高到低排序,即:longdouble、double、float、unsignedlonglong、longlong、unsignedlong、long、unsignedint和int。這里有一個小小的例外。如果long和int大小相同,那么無符號int的秩應(yīng)該在long之上。Char和short沒有出現(xiàn)在這個排名列表中,因為它們應(yīng)該已經(jīng)升級為int或unsignedint。
3.在任何涉及兩種數(shù)據(jù)類型的操作中,級別較低的類型將被轉(zhuǎn)換為級別較高的類型。
4.在賦值語句中,在將右邊的值賦給左邊的變量之前,應(yīng)該將右邊值的數(shù)據(jù)類型轉(zhuǎn)換為左邊變量的類型。也就是說,右邊的值將被轉(zhuǎn)換為左邊變量的任何數(shù)據(jù)類型的值。此過程可能會導(dǎo)致右側(cè)值的類型升級,也可能會導(dǎo)致其類型降級。所謂的"降級"意味著較高等級的類型被轉(zhuǎn)換成較低等級的類型。
5.當(dāng)作為參數(shù)傳遞給函數(shù)時,char和short將被轉(zhuǎn)換為int,float將被轉(zhuǎn)換為double。使用函數(shù)原型可以避免這種自動升級。
1.隱式轉(zhuǎn)換
c在下面。:將在四種情況下被隱式轉(zhuǎn)換。
1.在算術(shù)表達(dá)式中,低位類型可以轉(zhuǎn)換為高位類型。
2.在賦值表達(dá)式中,右表達(dá)式的值自動隱式轉(zhuǎn)換為左變量的類型并賦值給他。
3.當(dāng)在函數(shù)調(diào)用中傳遞參數(shù)時,系統(tǒng)隱式地將實際參數(shù)轉(zhuǎn)換為形參的類型,并將它們賦給形參。
4.當(dāng)函數(shù)有返回值時,系統(tǒng)會隱式地將返回表達(dá)式類型轉(zhuǎn)換為返回值類型,并將其賦給調(diào)用函數(shù)。
2.算術(shù)運算的隱式轉(zhuǎn)換
在算術(shù)運算中,首先采用以下類型轉(zhuǎn)換規(guī)則:
1.字符必須先轉(zhuǎn)換成整數(shù)(C語言規(guī)定字符型數(shù)據(jù)和整數(shù)型數(shù)據(jù)可以通用)。
類型轉(zhuǎn)換為int類型(兩者都屬于整型)。
3.浮點型數(shù)據(jù)在運算時總是轉(zhuǎn)換成雙精度型,以提高運算精度(都屬于實型)。
其次,有以下規(guī)則。
對不同類型的數(shù)據(jù)進(jìn)行操作時,應(yīng)先轉(zhuǎn)換成相同的數(shù)據(jù)類型,再進(jìn)行操作。轉(zhuǎn)換規(guī)則是從低電平轉(zhuǎn)換到高電平。轉(zhuǎn)換規(guī)則如下圖所示,:。
上圖的簡圖如下:
3.算術(shù)運算的例子
執(zhí)行:x100#39a#391.5*uf/#39b#39-s*3。33866.88838683667
其中U為無符號,F(xiàn)為浮點,S為短整型,X為浮點型。公式中的右表達(dá)式處理如下:
1.首先用int替換#39a#39、#39b#39和s,把1.5和f轉(zhuǎn)換成double類型。
2.計算100#39a#39,因為#39a#39已經(jīng)轉(zhuǎn)換成int類型,所以這個運算的結(jié)果是197。
3.計算1.5*U.由于1.5已經(jīng)轉(zhuǎn)換成double,U是無符號的,所以先把U轉(zhuǎn)換成double,然后進(jìn)行運算,運算結(jié)果是double。
4.計算1971.5*u,先把197轉(zhuǎn)換成double(比如197.00…00),結(jié)果是double。
5.計算f/#39b#39,F(xiàn)已經(jīng)轉(zhuǎn)換成double,而#39b#39已經(jīng)轉(zhuǎn)換成int,所以先把#39b#39轉(zhuǎn)換成double,結(jié)果是double。
6.計算(1971.5*u)f/#39b#39,都是double,所以結(jié)果也是double。
7.要計算s*3.1415926,先把S從int轉(zhuǎn)換成double,再進(jìn)行運算,結(jié)果是double。
8.最后,從前面的結(jié)果中減去,結(jié)果是雙倍的。
9.最后,表達(dá)式的結(jié)果被轉(zhuǎn)換成float并賦給x。