工具用的順手嗎?
你的回饋能幫助我們做得更好
線上檢視C語言運算子優先順序與結合性,助你理解表示式求值。
此表是收錄語法的參考子集,不執行或驗證示例。數字是本站分組,不能替代所用語言版本的完整語法、型別和求值規則;例子保留原始程式碼與字面值。 參考來源
a++後置運算左結合先返回当前值,然后将变量加 1。
i++a--後置運算左結合先返回当前值,然后将变量减 1。
i--a()後置運算左結合调用函数并传递参数。
printf("hi")a[]後置運算左結合访问数组的元素,等价于 *(a+i)。
arr[0].後置運算左結合访问结构体或联合体的成员。
obj.name->後置運算左結合通过指针访问结构体或联合体成员,等价于 (*p).x。
p->next(type){list}後置運算左結合C99 起在表达式中创建一个匿名对象并初始化。
(int[]){1,2,3}++a一元運算右結合先将变量加 1,再返回新值。
++i--a一元運算右結合先将变量减 1,再返回新值。
--i+a一元運算右結合返回操作数的值,触发整型提升。
+x-a一元運算右結合返回操作数的相反数。
-x!一元運算右結合对操作数取反,0 变 1,非 0 变 0。
!ready~一元運算右結合对整数按位取反,0 变 1,1 变 0。
~mask(type)一元運算右結合将表达式显式转换为目标类型。
(int)3.14*a一元運算右結合读取指针所指向地址处的值。
*p&a一元運算右結合获取变量在内存中的地址。
&valuesizeof一元運算右結合返回类型或表达式占用的字节数,编译期求值。
sizeof(int)_Alignof一元運算右結合C11 起返回类型的对齐字节数。
_Alignof(double)*乘除取餘左結合两个操作数相乘。
a * b/乘除取餘左結合整数除法向零截断;浮点除法保留小数。
10 / 3%乘除取餘左結合返回两个整数相除的余数,操作数必须为整型。
10 % 3+加減運算左結合两数相加,或指针与整数相加得到偏移地址。
a + b-加減運算左結合两数相减,或两个指针相减得到偏移元素个数。
a - b<<位移運算左結合整数按位左移,相当于乘以 2 的幂。
1 << 3>>位移運算左結合整数按位右移,有符号数实现定义、无符号数为逻辑右移。
8 >> 2<關係運算左結合比较两个操作数,左小于右返回 1,否则返回 0。
a < b<=關係運算左結合左小于或等于右返回 1,否则返回 0。
a <= b>關係運算左結合左大于右返回 1,否则返回 0。
a > b>=關係運算左結合左大于或等于右返回 1,否则返回 0。
a >= b==相等判斷左結合判断两个值是否相等。
a == b!=相等判斷左結合判断两个值是否不相等。
a != b&按位運算左結合两个整数按位执行逻辑与,两位都为 1 时结果为 1。
a & b^按位運算左結合两个整数按位执行异或,相同为 0、不同为 1。
a ^ b|按位運算左結合两个整数按位执行逻辑或,任一位为 1 结果为 1。
a | b&&邏輯運算左結合短路逻辑与:左操作数为 0 时不计算右操作数。
a && b||邏輯運算左結合短路逻辑或:左操作数为非 0 时不计算右操作数。
a || b?:條件運算右結合根据条件返回两个表达式之一。
x > 0 ? 1 : -1=賦值運算右結合将右操作数的值赋给左操作数。
x = 10+=賦值運算右結合x = x + y 的简写。
x += 1-=賦值運算右結合x = x - y 的简写。
x -= 1*=賦值運算右結合x = x * y 的简写。
x *= 2/=賦值運算右結合x = x / y 的简写。
x /= 2%=賦值運算右結合x = x % y 的简写。
x %= 3<<=賦值運算右結合x = x << y 的简写。
x <<= 2>>=賦值運算右結合x = x >> y 的简写。
x >>= 2&=賦值運算右結合x = x & y 的简写。
x &= 0xFF^=賦值運算右結合x = x ^ y 的简写。
x ^= mask|=賦值運算右結合x = x | y 的简写。
x |= 0x01,逗號運算左結合依次求值左、右操作数,整个表达式的结果为右操作数的值,常用于 for 语句步进。
for (i=0,j=9; i<j; ++i,--j)概覽
了解工具能解決的問題、計算或處理邏輯,以及資料邊界。
這份 C 語言運算子目錄依優先順序分成 1 至 15 級,1 級最高、數字越大優先順序越低。每筆資料列出符號或寫法、類別、結合性、簡要說明與範例;範圍涵蓋後置與一元運算、乘除、加減、位移、比較、位元與邏輯運算、條件、指定及逗號運算子。
優先順序回答的是不同運算子出現在同一個表示式時,語法預設如何分組。以 a + b * c 為例,乘法層級較高,因此分組相當於 a + (b * c)。結合性則處理同一層級連續出現的運算子:a - b + c 按左結合分組為 (a - b) + c;指定運算子右結合,a = b = c 分組為 a = (b = c)。
分組不等於運算元實際執行的先後次序。C 標準另有求值與副作用排序規則;除非語言規則明確規定,不能只看左結合就斷定左側一定先執行。括號能明確改變分組,但也不會自動為所有運算元指定執行順序。
目前目錄的級別與條目是靜態速查資料,不會解析或編譯你輸入的整段程式碼。篩選介面文字有繁體中文版本,但條目中的名稱、說明與範例文字仍可能是簡體中文;運算子符號和 C 程式碼範例則維持原樣。
指南
依步驟完成操作,並透過範例核對輸入與結果。
在關鍵字欄輸入運算子符號、名稱、說明片語、範例片段或級別數字。搜尋會比對這些欄位;例如輸入 && 可找邏輯 AND,輸入 11 可找第 11 級條目。
選擇後置、一元、乘法、位移、關係、位元、邏輯、條件、指定或逗號等類別。只想檢視完整清單時,保留「全部」。
可選左結合、右結合或無結合。結果會依級別分組顯示,旁邊標出優先順序提示;此目錄以 1 為最高級。若結果太少,清除關鍵字並將類別或結合性恢復為全部。
每筆條目可分別複製符號或範例,也可分享目前的關鍵字、類別與結合性篩選狀態。複製後仍應依程式上下文確認符號用法。
同一符號可能代表不同用法,例如 * 可表示乘法或一元解參考,& 可表示位元 AND 或取址。先輸入符號,再選類別通常較容易找到正確條目。
情境
查看這項工具在不同工作與生活流程中的用法。
初學者遇到乘法、比較或邏輯運算混在一起時,先查各符號層級,再在筆記中補上括號,檢查自己讀出的語法結構是否一致。
維護 C 程式的人可查詢不熟悉的位元或指定運算子,判斷哪些括號能讓原意更清楚,並把結果用於討論可讀性。
授課者可按類別或結合性找範例,示範同級運算子如何分組;說明時要另行區分文法分組與運算元求值順序。
問答
集中解答常見疑問與容易混淆的問題。
不是。這份目錄以 1 表示最高優先順序,數字增加代表優先順序降低;例如乘法第 3 級高於加法第 4 級。
不是。左結合表示同一級運算子形成語法分組的方向,例如 a - b + c 分成 (a - b) + c;它不保證運算元執行的先後。含副作用的複雜表示式應另查 C 標準相關規則。
符號可能有不同運算子角色,例如 * 可用於乘法與解參考。查看條目的類別、名稱與範例,或再加上類別篩選。
不會。它只篩選靜態運算子目錄,不會剖析、編譯或執行程式碼,也不會判定型別、語法錯誤或實際輸出。
須知
使用前了解適用範圍、結果限制與必要提醒。
條目是供快速對照使用的靜態資料,並非對所有 C 標準版本及編譯器擴充的完整相容性檢查。像複合字面量與 _Alignof 等寫法涉及特定標準版本;若專案需要舊版或指定編譯器支援,請依該專案採用的 C 標準及編譯器文件確認。
運算子優先順序和結合性只協助判讀語法分組。它們不會取代型別檢查,也不能普遍決定函式呼叫、遞增遞減或其他帶副作用運算元的執行先後。對順序敏感的程式,請依標準規則設計並拆解表示式;有疑義時使用括號表達意圖並以編譯器診斷與標準文本核對。
逗號也要看語法位置:逗號運算子是表示式中的運算子,但函式引數清單等位置的逗號可能只是分隔符號。不要只依符號外觀套用目錄說明,應先確認它在程式中的語法角色。
推薦
查找相關工具、專題與可用的 API 能力。