C/C++ 中的型別轉換是什麼?
型別轉換是一種將變數從一種資料型別轉換為另一種資料型別的方法。例如,如果要將一個 'long' 值儲存到一個簡單的整數中,則可以將 'long' 型別轉換為 'int' 型別。您可以使用 **型別轉換運算子** 顯式地將值從一種型別轉換為另一種型別,如下所示:
(type_name) expression
考慮以下示例,其中型別轉換運算子導致一個整數變數除以另一個整數變數的操作被執行為浮點運算:
示例
#include <stdio.h> main() { int sum = 17, count = 5; double mean; mean = (double) sum / count; printf("Value of mean : %f\n", mean ); }
當上述程式碼編譯並執行時,它會產生以下結果:
Value of mean : 3.400000
這裡需要注意的是,型別轉換運算子的優先順序高於除法,因此 sum 的值首先被轉換為 double 型別,最後再除以 count,從而得到一個 **double** 值。
型別轉換可以是隱式的,由編譯器自動執行,也可以透過使用型別轉換運算子顯式地指定。當需要型別轉換時,使用型別轉換運算子被認為是良好的程式設計實踐。
整數提升
整數提升是將小於 int 或 unsigned int 的整數型別的值轉換為 **int** 或 **unsigned int** 的過程。考慮一個將字元與整數相加的示例:
示例
#include <stdio.h> main() { int i = 17; char c = 'c'; /* ascii value is 99 */ int sum; sum = i + c; printf("Value of sum : %d\n", sum ); }
當上述程式碼編譯並執行時,它會產生以下結果:
Value of sum : 116
這裡,sum 的值為 116,因為編譯器正在執行整數提升,並在執行實際加法運算之前將 'c' 的值轉換為 ASCII 碼。
通常算術轉換
**通常算術轉換** 會隱式地將運算元的值轉換為公共型別。編譯器首先執行整數提升;如果運算元的型別仍然不同,則將其轉換為以下層次結構中出現的最高型別:
通常算術轉換不會對賦值運算子或邏輯運算子 && 和 || 執行。讓我們看下面的例子來理解這個概念:
示例
#include <stdio.h> main() { int i = 17; char c = 'c'; /* ascii value is 99 */ float sum; sum = i + c; printf("Value of sum : %f\n", sum ); }
輸出
Value of sum : 116.000000
這裡,很容易理解,首先 c 被轉換為整數,但由於最終值為 double,因此應用了通常算術轉換,編譯器將 i 和 c 轉換為 'float' 並將它們相加,從而得到一個 'float' 結果。
廣告