c c c語言中型別轉換問題

2021-09-13 01:23:47 字數 1153 閱讀 7129

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