C语言运算符优先级, 位运算容易搞错运算符优先级
需积分: 0 128 浏览量
更新于2024-04-16
收藏 31KB PDF 举报
### C语言运算符优先级详解
在C语言中,了解运算符的优先级与结合性对于正确编写程序至关重要。本文将详细介绍C语言中的各种运算符及其优先级,并给出具体的示例来帮助理解。
#### 运算符优先级表
下面列出了C语言中的运算符按优先级(从高到低)排列的情况。其中,“结合性”一栏表示相同优先级的运算符如何在表达式中被应用:左结合意味着从左向右应用,而右结合则相反。
| 运算符 | 描述 | 结合性 |
| --- | --- | --- |
| () | 圆括号:用于分组或函数调用 | 左至右 |
| [] | 方括号:数组下标 | 左至右 |
| . | 成员选择通过对象名称 | 左至右 |
| -> | 成员选择通过指针 | 左至右 |
| ++ -- | 后置递增/递减 | 左至右 |
| ++ -- | 前置递增/递减 | 右至左 |
| + - | 一元加/减 | 右至左 |
| ! ~ | 逻辑非/按位取反 | 右至左 |
| (type) | 类型转换 | 右至左 |
| * & | 指针解引用/取地址 | 右至左 |
| sizeof | 计算数据类型或变量的字节大小 | 右至左 |
| * / % | 乘法/除法/取模 | 左至右 |
| + - | 加法/减法 | 左至右 |
| << >> | 左移/右移 | 左至右 |
| < <= > >= | 关系小于/小于等于/大于/大于等于 | 左至右 |
| == != | 等于/不等于 | 左至右 |
| & | 按位与 | 左至右 |
| ^ | 按位异或 | 左至右 |
| | | 按位或 | 左至右 |
| && | 逻辑与 | 左至右 |
| || | 逻辑或 | 左至右 |
| ? : | 三元条件运算符 | 右至左 |
| = += -= *= /= %= &= ^= |= <<= >>= | 赋值/复合赋值 | 右至左 |
| , | 逗号运算符 | 左至右 |
#### 重要运算符详解
1. **圆括号** `()`:
- 用于函数调用。
- 用于改变运算顺序。
2. **方括号** `[]`:
- 用于访问数组元素。
3. **成员选择运算符** `.` 和 `->`:
- `.` 用于结构体或联合类型的成员访问。
- `->` 相当于间接的成员访问,通常用于指针指向的结构体或联合类型的成员访问。
4. **递增递减运算符** `++` 和 `--`:
- 前置递增/递减:`++a` 或 `--a`。
- 后置递增/递减:`a++` 或 `a--`。
5. **一元运算符** `+`、`-`、`!` 和 `~`:
- 一元加/减:`+a` 或 `-a`。
- 逻辑非/按位取反:`!a` 或 `~a`。
6. **类型转换** `(type)`:
- 将一个表达式的类型转换为另一种类型。
7. **指针运算符** `*` 和 `&`:
- 解引用操作符 `*`:获取指针所指向的数据。
- 地址操作符 `&`:获取变量的地址。
8. **乘法/除法/取模** `*`、`/` 和 `%`:
- 乘法 `a * b`。
- 除法 `a / b`。
- 取模 `a % b`(仅适用于整数)。
9. **按位移位运算符** `<<` 和 `>>`:
- 左移 `a << b`:将二进制位向左移动b位。
- 右移 `a >> b`:将二进制位向右移动b位。
10. **关系运算符** `<`、`<=`、`>` 和 `>=`:
- 小于 `a < b`。
- 小于等于 `a <= b`。
- 大于 `a > b`。
- 大于等于 `a >= b`。
11. **等价运算符** `==` 和 `!=`:
- 等于 `a == b`。
- 不等于 `a != b`。
12. **按位与运算符** `&`:
- 对两个二进制数进行按位与操作。
13. **按位异或运算符** `^`:
- 对两个二进制数进行按位异或操作。
14. **按位或运算符** `|`:
- 对两个二进制数进行按位或操作。
15. **逻辑与运算符** `&&`:
- 对两个布尔值进行逻辑与操作。
16. **逻辑或运算符** `||`:
- 对两个布尔值进行逻辑或操作。
17. **三元条件运算符** `? :`:
- 根据条件表达式的结果返回不同的值。
18. **赋值运算符** `=`、`+=`、`-=` 等:
- `=` 赋值运算符。
- `+=`、`-=`、`*=`、`/=` 等复合赋值运算符。
19. **逗号运算符** `,`:
- 用于连接多个表达式。
#### 示例
假设我们有以下代码片段:
```c
int a = 5;
int b = 3;
int c = (a + b) * 2; // 先执行括号内的加法,再执行乘法
```
这里,由于圆括号 `()` 的优先级高于乘法运算符 `*`,因此首先计算括号内的表达式 `a + b`,然后再将其结果与 `2` 相乘。
再看一个例子:
```c
int x = 1;
int y = 2;
int z = 3;
int result = x < y && y < z; // 检查 x<y 并且 y<z 是否成立
```
在这个例子中,`&&` 的优先级低于 `<`,但结合性是从左至右,所以首先计算 `x < y`,然后根据其结果决定是否计算 `y < z`。
通过上述讲解,我们可以看到掌握运算符的优先级和结合性对于编写正确的C程序至关重要。希望本文能够帮助读者更好地理解和使用C语言中的各种运算符。

fareast_mzh
- 粉丝: 1563
最新资源
- 微信小程序MD5加密(支持中文).zip
- [贵州]某机场扩建工程监理大纲(停机坪-滑行道-技术标).doc
- 污水厂在线仪表维护方案.doc
- 基础(桩)工程施工承包合同(分包合同).doc
- 第四大题-市场战略.doc
- 销售人员的薪酬设计.doc
- 工程案例分析教案.doc
- 如何给予积级的反馈.doc
- 建设工程委托监理合同补充协议.doc
- 公司综合大楼工程监理规划.doc
- 小程序转换器,基于支付宝_微信小程序, 轻松地转换成其它平台的小程序。(1).zip
- 微信小程序刻度尺组件.zip
- 2016年中学学生宿舍楼新建工程招标文件.doc
- 高层住宅楼工程施工进度计划管理措施.doc
- 电路分析填空题.docx
- FIDIC施工合同条件.ppt