- 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 条评论
目前还没有评论...