六星云課堂:小白適用的C語言數(shù)據(jù)類型轉(zhuǎn)換及轉(zhuǎn)換規(guī)則
1.不同類型數(shù)據(jù)間的混合運(yùn)算與類型轉(zhuǎn)換:
①若參與運(yùn)算量的類型不同,則先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算
②轉(zhuǎn)換按數(shù)據(jù)長度增加的方向進(jìn)行,以保證精度不降低。如int型和long型運(yùn)算時,先把int量轉(zhuǎn)成long型后再進(jìn)行運(yùn)算
a、若兩種類型的字節(jié)數(shù)不同,轉(zhuǎn)換成字節(jié)數(shù)高的類型
b、若兩種類型的字節(jié)數(shù)相同,且一種有符號,一種無符號,則轉(zhuǎn)換成無符號類型
③所有的浮點(diǎn)運(yùn)算都是以雙精度進(jìn)行的,即使僅含float單精度量運(yùn)算的表達(dá)式,也要先轉(zhuǎn)換成double型,再作運(yùn)算
④char型和short型參與運(yùn)算時,必須先轉(zhuǎn)換成int型
⑤在賦值運(yùn)算中,賦值號兩邊量的數(shù)據(jù)類型不同時,賦值號右邊量的類型將轉(zhuǎn)換為左邊量的類型。如果右邊量的數(shù)據(jù)類型長度左邊長時,將丟失一部分?jǐn)?shù)據(jù)

2.C語言轉(zhuǎn)換規(guī)則:
(1)整數(shù)和浮點(diǎn)型:
浮點(diǎn)型轉(zhuǎn)換成整型時,小數(shù)部分被省略,如果其值不能被整型表示,則其行為未定義。注意:將負(fù)的浮點(diǎn)型轉(zhuǎn)換成unsigned int 結(jié)果是沒有定義的。
當(dāng)把整型轉(zhuǎn)換成浮點(diǎn)型時,如果該值是在可表示范圍內(nèi),則結(jié)果可能是下一個較高或者較低的可表示值。如果結(jié)果在范圍外,則行為未定義。
(2)浮點(diǎn)型:
將較低精讀浮點(diǎn)型轉(zhuǎn)換成較高浮點(diǎn)型時:值不變。
將較高精度轉(zhuǎn)換成較低精度時:在范圍內(nèi),值不變,在范圍外,結(jié)果為定義
(3)整型提升:
如果原始類型都可以用int表示,則將其轉(zhuǎn)換成int,否則被轉(zhuǎn)換成unsigned int
(4)整型轉(zhuǎn)換:
將unsigned 轉(zhuǎn)換成 signed 時,如果可以在新類型表示,則表示,如果不能表示,結(jié)果與具體實(shí)現(xiàn)有關(guān),將signed 轉(zhuǎn)換成unsigned時,若unsigned位數(shù)窄,對二進(jìn)制補(bǔ)碼進(jìn)行左截取,若unsigned寬,對signed進(jìn)行符號擴(kuò)展。
(5)指針和整數(shù):
指針可加上或著減去一個整數(shù),轉(zhuǎn)換規(guī)則按照加法運(yùn)算符號方式進(jìn)行,兩個指向同一數(shù)組的指針可進(jìn)行加減運(yùn)算,方式按照算數(shù)轉(zhuǎn)換規(guī)則,值為0的整型常量或者void*型表達(dá)式可轉(zhuǎn)換成任意類型的指針,指針可以轉(zhuǎn)換成整型,注意整型必須足夠大,整型對象可以轉(zhuǎn)換成指針,一般用于將一個足夠?qū)挼膹闹羔樲D(zhuǎn)換來的整型轉(zhuǎn)換成(恢復(fù))指針,不同類型的指針間可以相互轉(zhuǎn)換,但必須滿足內(nèi)存對齊條件,一個指針可以轉(zhuǎn)換成同意類型的另一個指針,但是可以增加或者刪除另一個指針的限制符,如果和另一個指針,增加了相同的修飾符,則和另一個指針一樣,如果刪除了修飾符,則底層對象的運(yùn)算仍受到原聲明的限制。
以上就是本次分享的全部內(nèi)容,想要學(xué)習(xí)編程的小伙伴們,歡迎前往六星云課堂,獲取更多技能與教程。