C語言 資料型別轉換

2021-08-31 19:06:20 字數 1708 閱讀 1156

資料型別轉換分為兩種,一種為隱式轉換(預設轉換),另一種為顯式轉換(強制轉換)。隱式轉換就是編譯器默默地偷偷地進行的資料型別轉換,這種轉換不需要程式設計師干預,會自動發生。但隱式轉換不能滿足所有的需求。需要時,程式設計師也可以自己在**中明確地提出要進行型別轉換,這稱為強制型別轉換。

一、c語言資料型別

二、隱式轉換

自動轉換遵循以下規則: 

①若參與運算量的型別不同,則先轉換成同一型別,然後進行運算

②轉換按資料長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉成long型後再進行運算

a、若兩種型別的位元組數不同,轉換成位元組數高的型別

b、若兩種型別的位元組數相同,且一種有符號,一種無符號,則轉換成無符號型別

③所有的浮點運算都是以雙精度進行的,即使僅含float單精度量運算的表示式,也要先轉換成double型,再作運算

④char型和short型參與運算時,必須先轉換成int型

⑤在賦值運算中,賦值號兩邊量的資料型別不同時,賦值號右邊量的型別將轉換為左邊量的型別。如果右邊量的資料型別長度左邊長時,將丟失一部分資料,這樣會降低精度,丟失的部分按四捨五入向前捨入

上圖為資料型別的寬度大小排序,同型別的無符號比有符號寬。

總結:窄變寬,左邊補符號位,無符號數左邊補零;整型起

例項分析:

例題1:

#include

int main()

例題2:

#include

int 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");

結果為:a>-1     b

三、強制轉換

寬型別轉窄型別,保留低位資料 

例項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...