資料型別轉換分為兩種,一種為隱式轉換(預設轉換),另一種為顯式轉換(強制轉換)。隱式轉換就是編譯器默默地偷偷地進行的資料型別轉換,這種轉換不需要程式設計師干預,會自動發生。但隱式轉換不能滿足所有的需求。需要時,程式設計師也可以自己在**中明確地提出要進行型別轉換,這稱為強制型別轉換。
一、c語言資料型別
二、隱式轉換
自動轉換遵循以下規則:
①若參與運算量的型別不同,則先轉換成同一型別,然後進行運算
②轉換按資料長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉成long型後再進行運算
a、若兩種型別的位元組數不同,轉換成位元組數高的型別
b、若兩種型別的位元組數相同,且一種有符號,一種無符號,則轉換成無符號型別
③所有的浮點運算都是以雙精度進行的,即使僅含float單精度量運算的表示式,也要先轉換成double型,再作運算
④char型和short型參與運算時,必須先轉換成int型
⑤在賦值運算中,賦值號兩邊量的資料型別不同時,賦值號右邊量的型別將轉換為左邊量的型別。如果右邊量的資料型別長度左邊長時,將丟失一部分資料,這樣會降低精度,丟失的部分按四捨五入向前捨入
上圖為資料型別的寬度大小排序,同型別的無符號比有符號寬。
總結:窄變寬,左邊補符號位,無符號數左邊補零;整型起
例項分析:
例題1:
#include例題2:int main()
#include結果為:a>-1 bint main(){
unsigned short a=10;
unsigned int b=10;
if(a
printf("a
else
printf("a>-1\n");
if(b
printf("b
else
printf("b>-1\n");
三、強制轉換
寬型別轉窄型別,保留低位資料
例項1:
#include執行結果:int main()
{int a = 0x12345678;//12345678
char b = (char)a;
printf("%d,%x\n",b,b);
int c = 1000;//
char d = (char)c;
int e = d;
printf("%d,%x,%08x\n",20,20,20);
printf("%d,%d,%08x,%08x\n",d,e,d,e);
return 0;
C語言資料型別轉換
自動轉換發生在不同資料型別的量混合運算時,由編譯系統自動完成。自動轉換遵循以下規則 若參與運算量的型別不同,則先轉換成同一型別,然後進行運算。轉換按資料長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉成long型後再進行運算。所有的浮點運算都是以雙精度進行的,即使僅...
C語言資料型別轉換
變數的資料型別是可以轉換的。轉換的方法有兩種,一種是自動轉換,一種是強制轉換。自動轉換發生在不同資料型別的量混合運算時,由編譯系統自動完成。自動轉換遵循以下規則 若參與運算量的型別不同,則先轉換成同一型別,然後進行運算。轉換按資料長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先...
C語言資料型別轉換
資料型別轉換就是將資料 變數 表示式的結果 從一種型別轉換到另一種型別。例如,為了儲存小數你可以將int型別的變數轉換為double型別。資料型別轉換的一般格式為 type name expressiontype name為要轉換到的資料型別,expression為表示式。例如 float a 把a...