首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言強制型態轉換與運算子優先級、結合性完整解析

     編輯:關於C語言

強制型態轉換

語法:(型態指定符) (運算式)
功能:將運算式結果暫時轉換為指定型態,不改變原變數型態定義。

關鍵注意事項

  1. 雙重括號原則:型態與運算式皆需括號(單一變數可省略運算式括號)
    (int)(x+y) ✓ 整體轉換
    (int)x+y ✗ 僅 x 轉換後再加 y
  2. 臨時性:僅影響當次運算,變數本身型態與儲存不變

範例驗證


main() {
    float f = 5.75;
    printf("(int)f=%d, f=%f\n", (int)f, f);
}
// 輸出:(int)f=5, f=5.75
// f 經強制轉 int 截斷小數,但 f 本身仍為 5.75

C 運算子分類總覽(十大類)

類別運算子說明
1. 算術+ - * / % ++ --數值運算,7 種
2. 關係> < == >= <= !=比較運算,6 種
3. 邏輯&& || !邏輯運算,3 種
4. 位元& | ~ ^ << >>二進制位運算,6 種
5. 指派= += -= *= /= %= &= |= ^= >>= <<=3 類共 11 種
6. 條件?:三目運算子
7. 逗號,合併多運算式
8. 指標* &取內容、取位址
9. sizeofsizeof計算型態/運算式位元組數
10. 特殊() [] -> .括號、下標、成員存取

優先級與結合性:決定運算順序的雙重規則

C 運算子共 15 級優先級(1 最高),同優先級時依結合性決定順序:

  • 左結合性(自左至右):算術、關係、邏輯、位元、逗號等
    範例:x - y + z → (x - y) + z
  • 右結合性(自右至左):指派、條件、單目、強制轉換、sizeof
    範例:x = y = z → x = (y = z)
核心原則:優先級高者先運算;同級者依結合性方向結合。C 獨有的結合性機制增加表達力但也提高複雜度,需熟記常用運算子屬性。

算術運算子與運算式詳細規則

基本雙目運算子

運算子名稱結合性特殊規則
+加法右
-減法左亦可作負號(單目)
*乘法左
/除法左整數除法捨去小數;含實數則結果為 double
%取餘/模運算左雙運算元必為整數

整數與實數除法差異示範


void main() {
    printf("\n\n%d,%d\n", 20/7, -20/7);      // 2, -2(整數除法截斷)
    printf("%f,%f\n", 20.0/7, -20.0/7);  // 2.857..., -2.857...(實數除法)
}

取餘運算子 %


void main() {
    printf("%d\n", 100 % 3);  // 輸出 1(100 ÷ 3 餘 1)
}

自增/自減運算子 ++ --(單目、右結合性)

形式名稱運作時機運算式值
++i前置遞增先增後用增後新值
--i前置遞減先減後用減後新值
i++後置遞增先用後增增前舊值
i--後置遞減先用後減減前舊值

前後置差異經典追蹤


int i = 8;
printf("%d\n", ++i);  // 9 (先增為9再輸出)
printf("%d\n", --i);  // 8 (先減為8再輸出)
printf("%d\n", i++);  // 8 (先輸出8再增為9)
printf("%d\n", i--);  // 9 (先輸出9再減為8)
printf("%d\n", -i++); // -8 (先取負輸出-8再增為9)
printf("%d\n", -i--); // -9 (先取負輸出-9再減為8)

複合運算式中陷阱


int i = 5, j = 5, p, q;
p = (i++) + (i++) + (i++);  // 三個 i++ 相加:5+5+5=15,i 變 8
q = (++j) + (++j) + (++j);  // 三個 ++j 相加:6+7+8=21,j 變 8
// 修正:實際 q = 6+7+8 = 21,非原文 24(原文邏輯有誤)
printf("%d,%d,%d,%d", p, q, i, j);  // 15,21,8,8
修正說明:原教材範例 q=(++j)+(++j)+(++j) 結果應為 21(6+7+8),j 終值 8。原文標示 24 為錯誤。後置版 p 確為 15,i 終值 8。

算術運算式求值順序

運算式由常數、變數、函數、運算子組合。求值嚴格遵循優先級高先低後、同級依結合性。單一常數/變數/函數亦屬運算式特例。

重點總結

  1. 強制轉換:雙括號、臨時性、不改變變數定義型態
  2. 10 大運算子類別,掌握各類代表運算子
  3. 15 級優先級 + 左/右結合性 = 完整運算順序規則
  4. 整數除法截斷、% 需整數運算元
  5. 前置/後置自增減:先改後用 vs 先用後改,複合運算式中極易出錯
  6. 良好習慣:複雜運算式加括號明確分組、避免依賴隱含優先級
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved