C整型公升級和尋常算術轉換以及資料型別轉換

2021-08-15 20:54:33 字數 861 閱讀 4040

一、在算術表示式中存在整型公升級和尋常算術轉化問題

(unsigned)char,(unsigned)short --> ( unsigned )int -->float -->double -->long double

float、double、long double為浮點型資料。當沒有浮點型資料參與計算時,統一轉為(unsigned)int

例如:

char a=1,b=1,c;

printf("%d,%d",sizeof(c=a+b),sizeof(a+b));//結果為1,4

printf("%d",c);//報c未被初始化警告。說明上面c=a+b 並未對c進行賦值

printf(" %d ", sizeof 'a'); //結果為4

的結果是4, 是int的長度,編譯器首先將'a'公升級為整數97,再呼叫sizeof。

//以上說明1.計算中間轉為了int型別,2、並未將運輸結果賦值

int d = -1;

if (d <= sizeof(arr)/sizeof(arr[0]))

//sizeof返回unsigned int,故需將d看成unsigned int資料,所有d值非常大。

二、資料型別轉換

2.1 長資料型別轉為短資料型別,直接截斷即可

2.2 短資料轉長資料型別,需區別有無符號

unsigned int i = 257;

char c = i;//結果 c = 1

signed char c = 128;

unsigned int i = c;//i = 1111...1000,0000 最大值-128

整型公升級 尋常算術轉換

ansi c中的整型公升級 char,short int或者int型位段 bit field 包括它們的有符號或無符號變型,以及列舉型別,可以使用在需要int或unsigned int的表示式中,如果int可以完整地表示源型別的所有值,那麼該型別的值就轉換為int,否則轉換為unsigned int...

C專家程式設計 整型提公升與尋常算術轉換

1 字元和整型 整型提公升 如果char short int或者int型位段 bit field 包括它們有符號或無符號變型,以及列舉型別,可以使用在需要int或者unsigned int的表示式中。如果int可以完整表示源型別的所有值,那麼該源型別的值就轉換為int,否則轉換為unsigned i...

C 算術型別轉換和賦值型別轉換

運算過程中,當參與運算的運算元型別不同時,可進行型別轉換。包括 自動轉換 和強制轉換 自動型別轉換指在算術運算以及在賦值過程中,如果運算子兩邊的運算元屬於 型別相容 指型別不同但系統可以自動進行轉換 的情況,如整數 字元和實數之間,系統會自動進行型別轉換,然後再做運算。包括 算術型別轉換 賦值型別轉...