- 第一优先级:括号运算符(())和数组下标运算符([])以及成员访问运算符(.和->)
- 括号运算符用于改变运算顺序。例如
(a + b)*c,先计算括号内的a + b。 - 数组下标运算符用于访问数组元素,如
a[3]。 - 成员访问运算符用于访问结构体或联合体中的成员,如
struct student s; s.age(通过对象访问)或者struct student *p; p->age(通过指针访问)。
- 括号运算符用于改变运算顺序。例如
- 第二优先级:一元运算符(如++、–、!、~、-、+、*、&)
- 自增(
++)和自减(--)运算符有前置和后置之分。前置是先改变变量的值再使用,后置是先使用变量的值再改变。例如int a = 1; int b=++a;(b的值为2,a的值为2),int c = 1; int d = c++;(d的值为1,c的值为2)。 !是逻辑非运算符,将真变为假,假变为真。例如int a = 0; int b=!a;(b的值为1)。~是按位取反运算符,对一个整数的二进制位进行取反操作。-和+在这里作为一元运算符时,分别表示取负和取正。例如int a=-3;(取负),int b = +4;(取正,通常可以省略+)。*作为一元运算符是指针运算符,用于访问指针所指向的内容。例如int a = 10; int *p=&a; int b=*p;(b的值为10)。&是取地址运算符,用于获取变量的地址。例如int a; int *p = &a;获取a的地址并赋值给p。
- 自增(
- 第三优先级:算术运算符(乘除模:*、/、%)
- 乘法、除法和取模运算优先级相同。例如
int a = 6/2*3;(先计算6/2得到3,再乘以3,结果为9),int b = 7%3;(结果为1)。
- 乘法、除法和取模运算优先级相同。例如
- 第四优先级:算术运算符(加减:+、-)
- 加法和减法优先级相同。例如
int a = 3 + 4-2;(先计算3 + 4得到7,再减去2,结果为5)。
- 加法和减法优先级相同。例如
- 第五优先级:移位运算符(左移:«,右移:»)
- 左移运算符
<<是将一个数的二进制位向左移动指定的位数,右边补0。例如int a = 1<<3;(1的二进制是00000001,左移3位后得到00001000,即8)。 - 右移运算符
>>是将一个数的二进制位向右移动指定的位数。如果是无符号数,左边补0;如果是有符号数,左边补符号位。例如unsigned int b = 8>>2;(8的二进制是00001000,右移2位后得到00000010,即2)。
- 左移运算符
- 第六优先级:关系运算符(<、<=、>、>=)
- 用于比较两个值的大小关系。例如
int a = 3; int b = 5; int c=a < b;(c的值为1,因为3小于5)。
- 用于比较两个值的大小关系。例如
- 第七优先级:关系运算符(==、!=)
- 用于判断两个值是否相等或不相等。例如
int a = 3; int b = 3; int c=a == b;(c的值为1)。
- 用于判断两个值是否相等或不相等。例如
- 第八优先级:逻辑与运算符(&&)
- 只有当两个操作数都为真时,结果才为真。例如
int a = 1; int b = 0; int c=a && b;(c的值为0)。
- 只有当两个操作数都为真时,结果才为真。例如
- 第九优先级:逻辑或运算符(||)
- 只要两个操作数中有一个为真,结果就为真。例如
int a = 1; int b = 0; int c=a || b;(c的值为1)。
- 只要两个操作数中有一个为真,结果就为真。例如
- 第十优先级:条件运算符(?:)
- 这是一个三目运算符,语法为
表达式1?表达式2:表达式3。如果表达式1为真,则返回表达式2的值,否则返回表达式3的值。例如int a = 3; int b = 5; int c=(a > b)?a:b;(c的值为5)。
- 这是一个三目运算符,语法为
- 第十一优先级:赋值运算符(=、+=、-=、*=、/=、%=、«=、»=、&=、^=、|=)
- 基本的赋值运算符
=用于将一个值赋给一个变量。例如int a; a = 3;。 - 复合赋值运算符是先进行算术或位运算,然后再赋值。例如
int a = 3; a += 2;(相当于a = a+2,结果为5)。
- 基本的赋值运算符
- 第十二优先级:逗号运算符(,)
- 逗号运算符用于将多个表达式连接起来,从左到右依次计算表达式的值,整个逗号表达式的值等于最后一个表达式的值。例如
int a = (3, 4, 5);(a的值为5)。
- 逗号运算符用于将多个表达式连接起来,从左到右依次计算表达式的值,整个逗号表达式的值等于最后一个表达式的值。例如
下表将按运算符优先级从高到低列出各个运算符,具有较高优先级的运算符出现在表格的上面,具有较低优先级的运算符出现在表格的下面。在表达式中,较高优先级的运算符会优先被计算。
| 类别 | 运算符 | 结合性 |
|---|---|---|
| 后缀 | () [] -> . ++ -- | 从左到右 |
| 一元 | + - ! ~ ++ -- (type)* & sizeof | 从右到左 |
| 乘除 | * / % | 从左到右 |
| 加减 | + - | 从左到右 |
| 移位 | << >> | 从左到右 |
| 关系 | < <= > >= | 从左到右 |
| 相等 | == != | 从左到右 |
| 位与 AND | & | 从左到右 |
| 位异或 XOR | ^ | 从左到右 |
| 位或 OR | | | 从左到右 |
| 逻辑与 AND | && | 从左到右 |
| 逻辑或 OR | || | 从左到右 |
| 条件 | ?: | 从右到左 |
| 赋值 | = += -= *= /= %= >>= <<= &= ^= |= | 从右到左 |
| 逗号 | , | 从左到右 |