c语言之运算符及其优先级总结

本文详细介绍了C语言中的各类运算符,包括单目、双目和三目运算符,并提供了丰富的示例代码,同时附带了C语言运算符的优先级大全。

c语言运算符分为单目运算符双目运算符三目运算符,他们以表达式个数为标准来作为区分。

单目运算符就是一个表达式就可以完成的,像逻辑非!、自加++、自减--,按位取反~等等都是单目运算符。

bool isSelf = true;
for(int i=0; i<20; i++)
{
  if(i == 5)isSelf = !isSelf;
  if(!isSelf)printf("%d\n",i);
  else printf("false\n");
}

双目运算符是需要两个表达式来完成一句语句,类似于加、减、乘、除以及左移<<和右移>>都属于双目运算符

int a = 1,b = 2;
int c = a + b;
printf("%d\n",c);

在c语言中只有一个三目运算符,就是条件运算符? :,这个运算符可以以一行去代替平时单目或者双目运算符多行才可以完成的,比如使用以下代码可以实现第一个例子中一样的效果

bool isSelf = true;
for(int i=0; i<20; i++)
{
  if(i == 5)isSelf = !isSelf;
  isSelf == true ? printf("false\n") : printf("%d\n",i);
}

以下为c语言运算符及其优先级大全

(pdf版本下载链接:下载链接​​​​​​​

或者扫描文末二维码回复qita0012免费下载)

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

--

()

圆括号

(表达式)/函数名(形参表)

--

.

成员选择(对象)

对象.成员名

--

->

成员选择(指针)

对象指针->成员名

--

 

2

-

负号运算符

-表达式

右到左

单目运算符

~

按位取反运算符

~表达式

++

自增运算符

++变量名/变量名++

--

自减运算符

--变量名/变量名--

*

取值运算符

*指针变量

&

取地址运算符

&变量名

!

逻辑非运算符

!表达式

(类型)

强制类型转换

(数据类型)表达式

--

sizeof

长度运算符

sizeof(表达式)

--

 

3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

%

余数(取模)

整型表达式%整型表达式

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

5

<< 

左移

变量<<表达式

左到右

双目运算符

>> 

右移

变量>>表达式

 

6

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

小于

表达式<表达式

<=

小于等于

表达式<=表达式

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

 

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

 

13

? :

条件运算符

表达式1?

表达式2: 表达式3

右到左

三目运算符

 

14

=

赋值运算符

变量=表达式

右到左

--

/=

除后赋值

变量/=表达式

--

*=

乘后赋值

变量*=表达式

--

%=

取模后赋值

变量%=表达式

--

+=

加后赋值

变量+=表达式

--

-=

减后赋值

变量-=表达式

--

<<=

左移后赋值

变量<<=表达式

--

>>=

右移后赋值

变量>>=表达式

--

&=

按位与后赋值

变量&=表达式

--

^=

按位异或后赋值

变量^=表达式

--

|=

按位或后赋值

变量|=表达式

--

 

15

逗号运算符

表达式,表达式,…

左到右

--

 

<think>我们被要求回答关于C语言运算符优先级的问题,并且需要参考提供的引用内容。根据引用[1]和[2],我们可以整理出C语言运算符优先级顺序,并按照从高到低的顺序列出。 同时,我们还需要注意以下几点: 1. 行内数学表达式用$...$,但这个问题中可能涉及运算符,不需要数学表达式,但如果有表达式,我们会遵守规则。 2. 独立公式用$$...$$,但这里可能用不到。 3. 使用中文回答。 4. 生成相关问题。 5. 引用的内容末尾添加引用标识。 根据引用[1]和[2],我们可以整理出如下的优先级顺序(从高到低): 1. 非真正运算符:数组下标(如a[1])、函数调用(如func())、结构体成员选择符(如.和->) 2. 单目运算符:包括逻辑非(!)、按位取反(~)、自增(++)、自减(--)、负号(-)、类型转换((type))、解引用(*)、取地址(&)、sizeof 3. 双目运算符(按优先级从高到低): 算术运算符:乘法(*)、除法(/)、取模(%),加法(+)、减法(-) 移位运算符:左移(<<)、右移(>>) 关系运算符:小于(<)、小于等于(<=)、大于(>)、大于等于(>=),然后是等于(==)、不等于(!=) 位运算符:按位与(&)、按位异或(^)、按位或(|) 逻辑运算符:逻辑与(&&)、逻辑或(||) 4. 条件运算符(三目运算符)?: 5. 赋值运算符:包括=, +=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |= 6. 逗号运算符:, 注意:引用[1]中提到“任何一个逻辑运算符优先级低于任何一个关系运算符”,这里的逻辑运算符指的是逻辑与(&&)和逻辑或(||),关系运算符指的是<,<=,>,>=,==,!=。 我们将按照从高到低的顺序详细列出,并适当分组。 另外,引用[2]中详细列出了算术运算符,包括单目运算符中的正号(+)和负号(-),以及自增自减等。 在回答中,我们将引用这些内容,并在末尾添加引用标识。 同时,根据要求,我们需要在回答最后生成相关问题。 回答结构: 1. 首先概述C语言运算符优先级的重要。 2. 然后按照优先级从高到低列出运算符,并分组说明。 3. 可以给出一些例子来说明优先级的影响。 4. 最后生成相关问题。 </think>### C语言运算符优先级详解 C语言运算符优先级决定了表达式中运算的执行顺序,这对正确理解程序逻辑至关重要。以下是按优先级从高到低的分类总结: 1. **非运算符的最高优先级元素** - 数组下标:`arr[index]` - 函数调用:`func()` - 成员访问:`.`(结构体)、`->`(指针) 2. **单目运算符**(从右向左结合) `!`(逻辑非)、`~`(按位取反)、`++`/`--`(自增/减)、`+`/`-`(正负号)、`(type)`(强制类型转换)、`*`(解引用)、`&`(取地址)、`sizeof` *例: `*ptr++` 等价于 `*(ptr++)`,先执行自增* 3. **双目运算符**(按优先级降序): - **算术运算符**(从左向右): `*`(乘)、`/`(除)、`%`(取模)→ `+`(加)、`-`(减) *例:`a + b * c` 等价于 `a + (b * c)`* - **移位运算符**(从左向右): `<<`(左移)、`>>`(右移) *例:`x << 2 + 1` 等价于 `x << (2 + 1)`* - **关系运算符**(从左向右): `<`、`<=`、`>`、`>=` → `==`(等于)、`!=`(不等于) *注:逻辑运算符优先级低于关系运算符[^1]* - **位运算符**(从左向右): `&`(按位与)→ `^`(按位异或)→ `|`(按位或) - **逻辑运算符**(从左向右): `&&`(逻辑与)→ `||`(逻辑或) 4. **三目运算符**(从右向左): `?:`(条件运算),如 `a > b ? a : b` 5. **赋值运算符**(从右向左): `=`、`+=`、`-=`、`*=`、`/=` 等 6. **逗号运算符**(从左向右): `,`(分隔表达式,返回最右值) #### 关键规则 - 单目运算符优先级高于所有双目运算符 - 算术运算 > 移位 > 关系 > 位运算 > 逻辑运算 - 赋值运算符优先级仅高于逗号运算符 - 括号 `()` 可显式改变优先级顺序 **示例分析**: `a & b != c` → 先执行 `b != c`(关系运算),再执行 `&`(位运算),等价于 `a & (b != c)`[^1][^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值