1. 程式人生 > 其它 >c語言中的自動型別轉換

c語言中的自動型別轉換

技術標籤:C語言學習c語言

問題:輸入一個值,若小於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、所有的浮點運算都是以雙精度進行的。

4、char型和short型參與運算時,必須先轉換成int型。
5、在賦值運算中,“ = ” 兩邊的資料型別不同時, “ = ” 右邊的型別將轉換為左邊的型別。
6、當浮點型別被 降級(把一種型別轉換成更低級別的型別)為整數型別時,原來的浮點值會被 截斷(小數部分丟棄)。