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

C 語言運算符大全(十九):sizeof、複合賦值、優先級結合性完整表

     編輯:關於C語言

前言

運算符是表達式計算的原子單元。本文收錄 sizeof 運算符語義、複合賦值簡寫規則、以及 **Turbo C 完整優先級與結合性表** (15 級),並給出複雜表達式求值實例,作為編寫無歧義表達式的權威參考。

一、sizeof 運算符

  • **單目運算符**,編譯期計算(除可變長數組 C99)。
  • 操作數可為**類型名** (須加括號) 或**表達式/變量** (可不加括號)。
  • 返回值類型 size_t (無符號整數),單位:**位元組**。
操作數結果 (16-bit 系統典型)
sizeof(double)8
sizeof(int)2
float f; sizeof(f)4
int a[10]; sizeof(a)20 (整個數組大小)
int *p; sizeof(p)2/4/8 (指針大小,視模式/架構)

核心用途:動態分配 malloc(n * sizeof(T))、結構體對齊分析、跨平台可移植代碼。

二、複合賦值運算符 (聯合操作)

簡化 var = var op expr 為 var op= expr,**僅求值 var 一次** (對副作用表達式有區別)。

簡寫等價展開適用運算符
a += ba = a + b所有二元算術/位運算符
a -= ba = a - b
a *= ba = a * b
a /= ba = a / b
a %= ba = a % b
a &= ba = a & b
a |= ba = a | b
a ^= ba = a ^ b
a <<= ba = a << b
a >>= ba = a >> b

注意:a /= b - c 等價 a = a / (b - c),**非** a = a / b - c,複合賦值優先級**最低** (見下表)。

三、Turbo C 運算符優先級與結合性完整表 (15 級)

優先級**由高到低**,同級按結合性結合。

級運算符說明結合性
1() [] . ->括號、下標、結構成員、指針成員左→右
2! ~ - (負) ++ -- & (取址) * (解引用) (type) sizeof單目運算符、類型轉換、sizeof右→左
3* / %乘除模左→右
4+ -加減左→右
5<< >>位移左→右
6< <= > >=關係比較左→右
7== !=相等比較左→右
8&位與左→右
9^位異或左→右
10|位或左→右
11&&邏輯與 (短路)左→右
12||邏輯或 (短路)左→右
13?:條件運算符右→左
14= += -= *= ... (所有複合賦值)賦值右→左
15,逗號運算符 (順序求值,取最後值)左→右

四、複雜表達式求值實戰演練

例 1:邏輯與位運算混合

10 > 4 && !(100 < 99) || 3 <= 5
/* 步驟:
1. 10>4 → 1 (真)
2. 100<99 → 0 → !0 → 1
3. 1 && 1 → 1 (短路,右邊不算)
4. 3<=5 → 1
5. 1 || 1 → 1 (短路)
結果:1 */

例 2:邏輯與優先級陷阱

10 > 4 && !(100 < 99) && 3 <= 5
/* 1 && 1 && 1 → 1 */

若改為 10 > 4 && !(100 < 99) && 3 > 5 → 1 && 1 && 0 → 0。

例 3:複合賦值最低優先級

a = 10; b = 3; c = 2;
a /= b - c;   /* 等價 a = a / (b - c) = 10 / 1 = 10 */
/* 非 a = a / b - c = 3 - 2 = 1 */

五、避坑速查:優先級常見誤區

誤區代碼實際解析意圖往往為修正
if (a & FLAG == 0)a & (FLAG == 0)(a & FLAG) == 0加括號
p->x++(p->x)++ (後置 ++)通常正確確認語義
*p++*(p++) (取值後指針遞增)(*p)++ (值遞增)加括號 (*p)++
a + b > c ? d : e(a + b > c) ? d : ea + (b > c ? d : e)加括號
~a + 1(~a) + 1 (負數補碼)通常正確確認語義

總結

運算符優先級表是編譯器解析表達式的**唯一權威**。寫代碼時:**寧可多加括號明確意圖,不可賭記憶力**。複合賦值最低優先級、單目運算符右結合、逗號運算符最低且左結合,是三大易忘鐵律。sizeof 編譯期計算、複合賦值單次求值左值,配合優先級表,讓表達式零歧義。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved