1.不同型別參與運算時,型別轉變
其原則是將型別轉變為表示式中可容納範圍最大的那個
int --> ungsigned int --> long --> unsigned long --> long long --> unsigned long long
float-->double-->long double
(如果long和int字長相同,unsigne int大於long)
暫時不考慮char和short型別轉變(型別提公升)
(1)如果兩個運算物件乙個是有符號的乙個是無符號的,並且無符號的型別不小於有符號的型別,帶符號的物件轉換成無符號的型別;反之如果有符號的型別大,依賴於機器,如果帶符號的能儲存所有值,就轉變成該帶符號型別。
2.型別提公升
進行運算的時候,char、short都轉換為int型別,有必要時在運算完成後進行剪裁。
源型別提公升後的型別
char
int位段
int列舉
intunsigned char
intshort
intunsigned short
int陣列
相應的指標
如果int不能容納原資料,則轉化為unsigned int。
3.舉個容易出錯的例項
int main()
該比較會出現問題,在比較時乙個型別為int,另乙個型別為unsigned int,在比較時都轉換為unsigned int型別,所以d被轉換為了乙個很大的數,d=0xfffffffe,導致比較出錯。
(盡量使用有符號型別或使用相同型別,使用顯示型別轉換)
4.顯示型別轉換
強制型別轉化形式:
cast-name(expression);//其中cast-name可以是static_cast,dynamic_cast,const_cast,reinterpret_cast
(1)static_cast:任何具有明確定義的型別轉換,只要不包含底層const
(2)const_cast:只能改變運算物件的底層const,去掉const性質。(只改變常量的屬性)
const char *cp;
const_cast(cp);//invalid,只能改變常量的屬性
(3)reinterpret_cast:
C語言中的型別轉換
計算機進行算術運算時,通常要求運算元具有相同的位數 相同的儲存方式。而c語言支援在表示式中混合使用基本資料型別,因此需要在不同的資料型別之間進行轉換。在c語言中存在兩種型別的轉換,一種是隱式轉換,由編譯器自動處理轉換而無需程式開發人員介入,另一種是強制型別轉換 顯式轉換 需要程式開發人員使用強制轉換...
C語言中的型別轉換!
自動轉換發生在不同資料型別運算時,在編譯的時候自動完成 自動轉換遵循的規則就好比小盒子可以放進大盒子裡面一樣,下圖表示了型別自動轉換的規則。縮寫 ascii 英文全稱 american standard code for information interchange 美國資訊交換標準 是一種用於資...
C語言中的型別轉換
c語言中的型別轉換可以分為兩種 隱式轉換中的規則有 窄的向寬的轉變 unsigned 同型別無符號比有符號寬 同型別的轉換例如 int a 10 unsigned int b 10 if a b printf a b else printf a不同型別的轉換例如 int c 10 unsigned ...