- C
C语言常见运算符优先级
- @ 2025-3-28 0:32:41
在C语言中,运算符的优先级决定了表达式中操作的执行顺序。了解运算符的优先级对于编写正确的代码非常重要。以下是C语言中常见的运算符及其优先级(从高到低排序):
1. 初级优先级
- 括号
()
括号用于明确优先级,括号内的表达式优先计算。 - 数组下标
[]
用于访问数组元素。 - 结构体/联合体成员访问
.和->
.用于直接访问结构体成员,->用于通过指针访问结构体成员。 - 函数调用
()
用于调用函数。
2. 单目运算符
单目运算符优先级较高,通常作用于单个操作数。
- 后置自增/自减
++和--
如x++或x--。 - 前置自增/自减
++和--
如++x或--x。 - 正负号
+和-
如+5或-5。 - 逻辑非
!
如!true。 - 按位取反
~
如~0xFF。 - 类型转换
(type)
如(int)3.14。 - 取地址
&
如&x。 - 解引用
*
如*ptr。 - sizeof
计算变量或类型的大小,如sizeof(int)。
3. 算术运算符
算术运算符的优先级次于单目运算符。
- 乘法、除法、取模
*、/、%
如a * b、a / b、a % b。 - 加法、减法
+、-
如a + b、a - b。
4. 移位运算符
- 左移
<<
如a << 2。 - 右移
>>
如a >> 2。
5. 关系运算符
关系运算符用于比较两个值。
- 小于、小于等于
<、<=
如a < b、a <= b。 - 大于、大于等于
>、>=
如a > b、a >= b。
6. 相等运算符
相等运算符用于判断两个值是否相等或不等。
- 等于
==
如a == b。 - 不等于
!=
如a != b。
7. 位运算符
位运算符用于对整数的二进制位进行操作。
- 按位与
&
如a & b。 - 按位异或
^
如a ^ b。 - 按位或
|
如a | b。
8. 逻辑运算符
逻辑运算符用于布尔表达式。
- 逻辑与
&&
如a && b。 - 逻辑或
||
如a || b。
9. 条件运算符
- 三元运算符
? :
如a > b ? x : y。
10. 赋值运算符
赋值运算符用于给变量赋值。
- 简单赋值
=
如a = 5。 - 复合赋值
+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=
如a += 5等价于a = a + 5。
11. 逗号运算符
- 逗号
,
用于分隔多个表达式,整个表达式的值为最后一个表达式的值。
如a = (b = 3, b + 2)中,a的值为5。
总结表
| 优先级 | 运算符 | 说明 |
|---|---|---|
| 1 | ()、[]、.、-> |
括号、数组、结构体成员访问 |
| 2 | ++、--、+、-、! |
单目运算符 |
| 3 | *、/、% |
算术运算符 |
| 4 | +、- |
加减运算符 |
| 5 | <<、>> |
移位运算符 |
| 6 | <、<=、>、>= |
关系运算符 |
| 7 | ==、!= |
相等运算符 |
| 8 | & |
按位与 |
| 9 | ^ |
按位异或 |
| 10 | l |
按位或 |
| 11 | && |
逻辑与 |
| 12 | ll |
逻辑或 |
| 13 | ?: |
条件运算符 |
| 14 | =、+=、-= 等 |
赋值运算符 |
| 15 | , |
逗号运算符 |
注意事项
- 结合性:当运算符优先级相同时,按照结合性决定执行顺序。大多数运算符是从左到右结合(如
+和-),但赋值运算符和条件运算符是从右到左结合。 - 括号:为了提高代码的可读性,建议使用括号明确优先级,即使某些情况下可以省略括号。
- 隐式类型转换:某些运算符(如
/和%)可能会涉及隐式类型转换,需注意数据类型。
通过掌握这些运算符的优先级规则,可以避免因优先级错误而导致的程序逻辑问题!
0 条评论
目前还没有评论...