工具用的顺手吗?
你的反馈能帮助我们做得更好
在线查看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级表示目录中优先级最高,15级最低;每条记录展示符号或写法、类别、结合性、简要说明和示例。目录包括后缀、一元、乘除、加减、移位、关系、相等、位运算、逻辑、条件、赋值和逗号等类别。
优先级决定不同运算符组合时怎样分组;结合性用于同一级运算符连续出现时确定语法结构。例如,a + b * c按优先级分组成a + (b * c),a - b + c因加减同级且左结合,分组成(a - b) + c。显式括号可以改变默认分组,也通常能让代码更容易读。
分组不等于操作数的实际执行先后。C标准还单独规定表达式中的求值与副作用何时排序;对许多运算符,不能仅凭优先级或结合性推断哪个操作数先执行。这个区别尤其适用于函数调用和带副作用的表达式。
读表时可以先比较相邻层级:乘除高于加减,加减高于移位,移位高于大小比较;按位与、异或、按位或又分别低于相等判断,逻辑与和逻辑或更低。条件运算符、赋值和逗号运算符位于目录的低优先级区域。这样的层级有助于看出为什么一些看似相近的符号会先后分组不同。
指南
按步骤完成操作,并通过示例核对输入与结果。
在关键词框输入运算符符号、名称、示例片段或级别数字。列表会在符号、名称、说明、示例和优先级级别中筛选匹配项。
需要比较一类规则时,选乘法、关系、位运算、赋值等类别;保留“全部”可查看完整目录。
可选左结合、右结合或无结合,查看同类规则。若结果为空,先清除关键词,再检查类别和结合性是否同时限制了结果。
查看级别、类别、结合性、说明和示例;需要写入笔记或编辑器时,可分别复制符号或示例。页面也支持分享当前筛选条件。
有些符号会出现在不止一种类别中。例如星号既可用于乘法,也可出现在一元指针解引用写法中;先搜符号,再按类别筛选,通常比只看符号更容易找到目标用法。
场景
查看这项工具在不同工作与生活流程中的用法。
遇到关系、逻辑和位运算混在一起时,逐个查询符号所在级别,再用括号写出语法分组,核对原代码的阅读方式。
学习赋值或条件表达式时,筛选右结合记录,用简单表达式练习默认分组,再对照显式括号检查理解。
对容易误读的表达式先确认规则,再在代码中添加必要括号。清楚的分组有助于评审者快速理解意图。
问答
集中解答高频疑问与容易混淆的问题。
不是。此目录用1表示最高级别,数字递增时优先级降低。实际分组还要同时看运算符类别和括号。
不是。结合性描述语法分组,不保证操作数的运行先后。C标准对求值顺序另有规则,不能把“左结合”理解成通用的从左到右执行。
先清空类别和结合性筛选,再试符号、名称或示例关键词。该页面是目录查询器,不会解析整段C代码来判断表达式。
须知
使用前了解适用范围、结果限制与必要提醒。
这里展示的是运算符目录与示例,不是编译器,也不会验证类型、语法错误或实际运行结果。不同C标准版本和编译器扩展可能影响某些写法是否可用;涉及兼容性时,应按项目选定的语言标准和编译器文档复核。
当表达式包含自增、自减、函数调用或其他副作用时,避免从优先级表推测求值先后。若顺序对结果重要,拆分表达式或明确设计代码逻辑;不确定时以标准文本和目标编译器的诊断为准。
注意区分逗号运算符和语法中的逗号分隔符。例如函数参数列表里的逗号用于分隔参数,并不因此就把整段参数列表视为一个逗号运算表达式。读取复杂代码时,应先结合语法上下文,再使用目录中的运算符条目。
推荐
查找相关工具、专题与可用的 API 能力。