目錄
前文列表
《程序編譯流程與 GCC 編譯器》
《C 語言編程 — 基本語法》
《C 語言編程 — 基本數據類型》
《C 語言編程 — 變量與常量》
《C 語言編程 — 運算符》
《C 語言編程 — 邏輯控制語句》
《C 語言編程 — 函數》
《C 語言編程 — 高級數據類型 — 指針》
《C 語言編程 — 高級數據類型 — 數組》
《C 語言編程 — 高級數據類型 — 枚舉》
《C 語言編程 — 高級數據類型 — 結構體與位域》
《C 語言編程 — 高級數據類型 — 共用體》
《C 語言編程 — 數據類型的別名》
數據類型轉換
C 語言中如果一個表達式中含有不同類型的常量和變量,在計算時,會將它們自動轉換爲同一種類型。此外,在 C 語言中也可以對數據類型進行強制轉換。
在編程時,有需要類型轉換的時候都用上強制類型轉換運算符,是一種良好的編程習慣。
隱式(自動)類型轉換
- 浮點數賦給整型,該浮點數小數被捨去;
- 整數賦給浮點型,數值不變,但是被存儲到相應的浮點型變量中;
#include <stdio.h>
int main(){
int i = 17;
char c = 'c'; /* ascii 值是 99 */
int sum;
sum = i + c;
printf("Value of sum : %d\n", sum );
}
常用的算術轉換
常用的算術轉換是隱式地把值強制轉換爲相同的類型。編譯器首先執行整數提升(把小於 int/unsigned int 的整數類型自定轉換爲 int/unsigned int 的過程),如果操作數類型不同,則它們會被轉換爲下列層次中出現的最高層次的類型:
注意,常用的算術轉換不適用於賦值運算符以及邏輯運算符。
顯式(強制)類型轉換
強制類型轉換是把變量從一種類型轉換爲另一種數據類型。例如,如果您想存儲一個 long 類型的值到一個簡單整型中,就需要把 long 類型強制轉換爲 int 類型。此時,就可以使用 強制類型轉換運算符:(類型標識符)(表達式)
。
#include <stdio.h>
int main() {
float f, a, x=3.6, y=5.2;
int i=4, b;
a = x + y;
b = (int)(x + y);
f = 10 / i;
printf("a=%d, b=%d, f=%f, x=%f\n", a, b, f, x);
return 0;
}
運行:
$ ./main
a=8.799999, b=8, f=2.000000, x=3.600000
#include <stdio.h>
int main() {
int sum = 17, count = 5;
double mean;
mean = (double)sum / count;
// mean = (double)(sum / count); 此時返回 3.000000
printf("Value of mean: %f", mean);
return 0;
}
需要注意的是,強制類型轉換運算符的優先級大於除法,因此 sum 的值首先被轉換爲 double 型,然後除以 count,得到一個類型爲 double 的值。注意,如果是 (double)(sum / count)
的話,則會先進行整數運算得到 3 再類型轉換爲雙精度浮點數 3.000000。
運行:
$ ./main
Value of mean: 3.400000