在
c中,不同型別的操作可以化合成乙個操作,例如,下面的表述式:
double dvar = 2.5 //define dvar as a variable of type double.
dvar *= 3;//multiply dvar by an integer constant.
if ( dvar < 10l )//compare dvar with a long-integer constant
當運算元據具有不同的型別時,確定的場景下,在執行操作前,編譯器會嘗試將它們轉換來統一的型別,而且,你必須在程式中插入型別轉換指令,型別轉換產生的結果具有新的型別,
可能是void
型別(表示表示式的值被丟棄),或都是數學精英或指標,例如,結構體指標可能會被轉化為不同的指標型別,然而,乙個實際的結構體值不能被轉換為不同的結構體型別。
當運算元的型別使用不恰當時,編譯器使用乙個隱式的型別轉換,或者呼叫函式時傳入乙個與形參型別不匹配的引數,在變數初始化或者賦值時,編譯器在必要時也會執行隱式轉換。
你也可以顯式地使用
cast
操作符進行型別轉換。
(type_name) expression
在下面的例子中,
cast
操作符將兩個整形相除的結果轉換為浮點型:
int sum = 22, count = 5;
double mean = (double)sum/count; 因為
cast
操作符的優先順序高於除法,所以在例子中,變數
sum先被轉換為
double
型別,然後編譯器隱式地將除數
count
轉換為相同的型別。然後才進行除法操作。
當可能發生資訊丟失時,你要盡可能地使用
cast
操作,就像
int轉換為
unsigned int
,例如,顯式的轉換避免了編譯器告警,例如,將乙個函式的返回值使用
void
轉換丟棄,這樣會使用你可能也丟棄了錯誤指示,但這卻沒有告警。
本章中會舉例說時編譯器提供的隱式轉換,然而,卻很少有使用
cast
操作符的例子,除非很必要。
C核心技術手冊(二十)
在c 中,常量是表示乙個固定值的記號,它可能是整型 浮點型 字元 或乙個串。乙個常量的型別由它的值和記法來決定。這裡討論的常與混合常量不同,混合常量在c99 標準中介紹,它通常是可修改的物件,類似於變數,了解混合常量的詳細介紹和特殊操作可參見第五章。乙個整型常量可以以普通的十進位制數表示,或者是八進...
C核心技術手冊(二十五)
型別轉換通常存在於任意兩個算數型別中,當必要時,編譯器隱式地執行它們,如果新型別能夠表示它,此種轉換將保護它的值,這通常也並不絕對,例如,當你將乙個負數轉換為無符號型別,或將乙個浮點數的小數部分由 double 轉換為int 時,新型別不能表示原來的值,在這種情況下,編譯器會產生乙個告警。4.1.1...
C核心技術手冊(二十七)
4.1.5 算術型別轉換結果 由於不同的型別有不同的目的 特性和侷限性,將乙個型別轉換為另一型別通常要處理這些差異,通常,乙個型別轉換後的值取決於目標型別的特性。4.1.5.1 bool 型別轉換 任何標量型別可被轉換為 bool,結果為0i.e.當標量值為 o時,使用 false 當標量值為 1時...