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