c語言中的自動型別轉換
阿新 • • 發佈:2020-12-14
問題:輸入一個值,若小於110(規定用100的1.1倍表示)輸出YES。
最初程式碼:
#include <stdio.h>
int mian(void){
int a,b=100;
scanf("%d",&a);
if(a<1.1*b){
printf("YES\n");
}
return 0;
}
執行結果:
修改後程式碼:
#include <stdio.h>
int main(void){
int a,b=100;
double n;
n=1.1*b;
scanf ("%d",&a);
if(a<n){
printf("YES\n");
}
return 0;
}
執行結果:
問題原因:1.1*b 表示式的值為double型別的110.000000。
C語言自動型別轉換規則:
1、若參與運算量的型別不同,則先轉換成同一型別,然後進行運算。
2、轉換按資料長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉成long型後再進行運算。
a、若兩種型別的位元組數不同,轉換成位元組數高的型別。
b、若兩種型別的位元組數相同,且一種有符號,一種無符號,則轉換成無符號型別。
3、所有的浮點運算都是以雙精度進行的。
5、在賦值運算中,“ = ” 兩邊的資料型別不同時, “ = ” 右邊的型別將轉換為左邊的型別。
6、當浮點型別被 降級(把一種型別轉換成更低級別的型別)為整數型別時,原來的浮點值會被 截斷(小數部分丟棄)。