日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C的隐式类型转换

發(fā)布時間:2025/3/20 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C的隐式类型转换 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

C的隱式類型轉(zhuǎn)換

隱式類型轉(zhuǎn)換分三種,即算術(shù)轉(zhuǎn)換、賦值轉(zhuǎn)換和輸出轉(zhuǎn)換。

1.算術(shù)轉(zhuǎn)換

?? ?進行算術(shù)運算(加、減、乘、除、取余以及符號運算)時,不同類型數(shù)招必須轉(zhuǎn)換成同 一類型

????的數(shù)據(jù)才能運算,算術(shù)轉(zhuǎn)換原則為:

? ? 1.1?整型提升:

????對于所有比int小的類型,包括char, signed char, unsigned char, short,?unsigned short,

????首先會提升為int類型。

?? ?在進行運算時,以表達式中最長類型為主,將其他類型位據(jù)均轉(zhuǎn)換成該類型,如:

????(1)若運算數(shù)中有double型或float型,則其他類型數(shù)據(jù)均轉(zhuǎn)換成double類型進行運算。

????(2)若運算數(shù)中最長的類型為long型.則其他類型數(shù)均轉(zhuǎn)換成long型數(shù)。

????(3)若運算數(shù)中最長類型為int型,則char型也轉(zhuǎn)換成int型進行運算。算術(shù)轉(zhuǎn)換是在運算過程中自

?????????動完成的。

? ? 1.2?特別注意的是有符號和無符號之間的轉(zhuǎn)換:

? ? ?包含long與unsigned int,32位機器上都是4字節(jié),所以均轉(zhuǎn)換為unsigned long.

? ? ?包含signed與unsigned int,signed會轉(zhuǎn)換為unsigned。如果int恰好為負(fù)數(shù),其結(jié)果為對

???? ?unsigned取值個數(shù)求模的結(jié)果。比如將-1賦給8位的unsigned char,呢么結(jié)果就是255

? ? (-1對256取模后的值)。unsigned char取值范圍0~255。


2.賦值轉(zhuǎn)換

?? ?進行賦值操作時,賦值運算符右邊的數(shù)據(jù)類型必須轉(zhuǎn)換成賦值號左邊的類型,若右邊的數(shù)據(jù)

????類的長度大于左邊,則要進行截斷或舍入操作。

下面用一實例說明:

char?ch; int?i,result; float?f; double?d; result=ch/i+(f*d-i);

(1)首先計算 ch/i,ch → int型,ch/i → int型。

(2)接著計算 f*d-i,由于最長型為double型,故f→double型,i→double型,f*d-i→double型。

(3)(ch/i) 和(f*d-i)進行加運算,由于f*d-i為double型,故ch/i→double型,ch/i+(f*d-i)→double型。

(4)由于result為int型,故ch/i+(f*d-i)→double→int,即進行截斷與舍入,最后取值為整型。


3.輸出轉(zhuǎn)換

?? ?在程序中將數(shù)據(jù)用printf函數(shù)以指定格式輸出時,當(dāng)要輸出的鹽據(jù)類型與輸出格式不符時,便自

????動進行類型轉(zhuǎn)換,如一個long型數(shù)據(jù)用整型格式(%d)輸出時,則相當(dāng)于將long型轉(zhuǎn)換成整型

????(int)數(shù)據(jù)輸出;一個字符(char)型數(shù)據(jù)用整型格式輸出時,相當(dāng)于將char型轉(zhuǎn) 換成int型輸出。

????注意:較長型數(shù)據(jù)轉(zhuǎn)換成短型數(shù)據(jù)輸出時,其值不能超出短型數(shù)據(jù)允許的值范圍,否則 轉(zhuǎn)換時

????將出錯。如:

long?a=80000; printf("%d",a);

?????運行結(jié)果為14464,因為int型允許的最大值為32767,80000超出此值,故結(jié)果取以32768

? ? ?為模的余數(shù),即進行如下取余運算:

(80000-32768)-32768=14464;

????輸出的數(shù)據(jù)類型與輸出格式不符時常常發(fā)生錯誤,如:

int?d=9; printf("%f",d);

????或

float?c=3.2; printf("%d",c);

????將產(chǎn)生錯誤的結(jié)果。


轉(zhuǎn)載于:https://my.oschina.net/Ccx371161810/blog/293941

總結(jié)

以上是生活随笔為你收集整理的C的隐式类型转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。