附上C语言的运算附优先级顺口溜

本文详细介绍了C语言中44个基本运算符的分类及作用,包括初等运算符、单目运算符、算术运算符等,并解释了运算符的结合方向如何影响表达式的求值顺序。

醋坛酸味灌
味落跳福豆

共44个运算符

醋-初等,4个: ( ) [ ] -> 指向结构体成员 . 结构体成员
坛-单目,9个: ! ~ ++ -- -负号 (类型) *指针 &取地址 sizeof长度
酸-算术,5个: * / % + -减
味-位移,2个: << >>
灌-关系,6个: < <= > >= == 等于 != 不等于
味-位逻,3个: & 按位与 ^ 按位异或 | 按位或
落-逻辑,2个: && 逻辑与 || 逻辑或
跳-条件,1个,三目: ? :
福-赋值,11个: = += -= *= /= %= >>= <<= &= ^= |=
豆-逗号,1个: ,

结合方向自右向左的只有三类:赋值、单目和三目
同一优先级的运算顺序由结合方向决定

C语言中的运算优先级决定了表达式中运算符的执行顺序。优先级较高的运算符会先于优先级较低的运算符执行。以下是C语言中常见运算符的优先级表格,从高到低排列,并附上结合律[^1]。 ### 运算优先级和结合律 | 优先级 | 运算符 | 描述 | 结合律 | |--------|--------|------|--------| | 1 | `()` `[]` `->` `.` | 函数调用、数组下标、结构体成员访问 | 从左到右 | | 2 | `++` `--` `!` `~` `+` `-` `*` `&` `sizeof` `_Alignof` | 单目运算符(递增、递减、逻辑非、按位取反、正负号、指针解引用、取地址、大小、对齐) | 从右到左 | | 3 | `(类型)` | 类型转换 | 从右到左 | | 4 | `*` `/` `%` | 乘法、除法、取模 | 从左到右 | | 5 | `+` `-` | 加法、减法 | 从左到右 | | 6 | `<<` `>>` | 位左移、位右移 | 从左到右 | | 7 | `<` `<=` `>` `>=` | 关系运算符(小于、小于等于、大于、大于等于) | 从左到右 | | 8 | `==` `!=` | 相等、不相等 | 从左到右 | | 9 | `&` | 按位与 | 从左到右 | | 10 | `^` | 按位异或 | 从左到右 | | 11 | `|` | 按位或 | 从左到右 | | 12 | `&&` | 逻辑与 | 从左到右 | | 13 | `||` | 逻辑或 | 从左到右 | | 14 | `?:` | 条件运算符 | 从右到左 | | 15 | `=` `+=` `-=` `*=` `/=` `%=` `&=` `^=` `|=` `<<=` `>>=` | 赋值运算符 | 从右到左 | | 16 | `,` | 逗号运算符 | 从左到右 | ### 示例代码 以下是一些示例代码,展示不同优先级运算符的使用: ```c #include <stdio.h> int main() { int a = 4, b = 8, c = 2; // 示例 1: 乘法优先于加法 int result1 = a + b * c; // 先计算 b * c,然后计算 a + 结果 printf("Result of a + b * c is %d\n", result1); // 输出 11 // 示例 2: *= 有比 == 更高的优先级 int d = (b *= a) == (c * a); // 比较 b 与 a*c 的结果 printf("Result of (b *= a) == (c * a) is %d\n", d); // 输出 0, 因为 b=a*b 不等于 c*a // 示例 3: 使用括号明确运算顺序 int result2 = (a + b) * c; // 先计算 a + b,然后计算 结果 * c printf("Result of (a + b) * c is %d\n", result2); // 输出 24 return 0; } ``` ### 常见的陷阱和错误 忽略运算优先级可能导致逻辑错误,例如混淆了位运算与逻辑运算符的优先级,或者在条件判断中误用了赋值运算符 `=` 而不是比较运算符 `==`。 ```c #include <stdio.h> int main() { int a = 0, b = 0; // 逻辑错误: 程序员的意图可能是比较 a 和 b 是否都等于0 if (a = 1 & b = 0) { // 这里实际上执行了赋值操作 printf("a and b are zero\n"); } else { printf("a and b are not zero\n"); // 这行代码会被执行 } return 0; } ``` ### 使用括号明确优先级 在复杂表达式中,使用括号可以让代码的意图更明确,避免因运算优先级问题导致的错误。 ```c #include <stdio.h> int main() { int a = 5, b = 3, c = 2; // 使用括号明确运算顺序 int result = (a + b) * c; // 先计算 a + b,然后计算 结果 * c printf("Result of (a + b) * c is %d\n", result); // 输出 16 return 0; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值