C语言拾遗-C语言运算符

摘要:C语言运算符种类极其繁多,这既是它的优点,也是它的缺点。C语言运算符按照功能来分,至少可以分为算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和其他运算符六大类;按照优先级来分,从高到低可分为15级;若按照所带操作数的个数来分,又可分为:单目、双目和三目运算符;而按照运算顺序来看,又有左结合性和右结合性之分。

在第一次学习C语言运算符的时候,按照功能分类去学便于记忆。而在后续软件开发的工作中,往往查阅最多的是各种运算符的优先级。本博客并不是用于新手入门,所以下面主要以优先级从高到低来整理C语言运算符,希望按照功能分类去学习的同学可以点击这里。

C语言运算符

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

--

()

圆括号

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

--

.

成员选择(对象)

对象.成员名

--

->

成员选择(指针)

对象指针->成员名

--

2

-

负号运算符

-表达式

右到左

单目运算符

~

按位取反运算符

~表达式

++

自增运算符补充1

++变量名/变量名++

--

自减运算符

--变量名/变量名--

*

取值运算符

*指针变量

&

取地址运算符

&变量名

!

逻辑非运算符

!表达式

(类型)

强制类型转换

(数据类型)表达式

--

sizeof

长度运算符

sizeof(表达式)

--

3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

%

余数(取模)

整型表达式%整型表达式

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

5

<< 

左移补充2

整型表达式<<整型表达式

左到右

双目运算符

>> 

右移

整型表达式>>整型表达式

6

大于补充3

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

小于

表达式<表达式

<=

小于等于

表达式<=表达式

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

8

&

按位与

整型表达式&整型表达式

左到右

双目运算符

9

^

按位异或

整型表达式^整型表达式

左到右

双目运算符

10

|

按位或

整型表达式|整型表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或补充4

表达式||表达式

左到右

双目运算符

13

?:

条件运算符

表达式1?

表达式2: 表达式3

右到左

三目运算符

14

=

赋值运算符

变量=表达式

右到左

--

/=

除后赋值

变量/=表达式

--

*=

乘后赋值

变量*=表达式

--

%=

取模后赋值

变量%=表达式

--

+=

加后赋值

变量+=表达式

--

-=

减后赋值

变量-=表达式

--

<<=

左移后赋值

变量<<=表达式

--

>>=

右移后赋值

变量>>=表达式

--

&=

按位与后赋值

变量&=表达式

--

^=

按位异或后赋值

变量^=表达式

--

|=

按位或后赋值

变量|=表达式

--

15

逗号运算符补充5

表达式,表达式,…

左到右

--

补充说明:

  1. ++i,i++的区别:i++先做别的事,再自己加1,++i先自己加1,再做别的事情。
  2. >>与<<:左移的时候,移出左界的几位丢失,右边空出来的几位用0补齐。右移的时候有两种情况:一是逻辑右移,左边移入的位用0填充;另一种是算术右移,左边移入的位有原先该值的符号位绝对,符号位为1则移入的位均为1,符号位为0则移入的位均为0。具体使用哪一种操作取决于编译器。
  3. >,>=,<,<=,!=,==,这些运算符产生的结果都是一个整型数,而不是一个布尔值。
  4. &&操作符的左操作数总是首先进行求值,如果它的值为真,然后就紧接着对右操作数进行求值。如果左操作数为假,那么右操作数便不再进行求值,因为整个表达式的值肯定是假的,右操作数的值已无关紧要。||操作符也具有相同的特点,它首先对左操作数进行求值,如果它的值是真,右操作数便不再求值,因为整个表达式的值此时已经确定。这个行为常常被称为短路求值(short-circuited evaluation)。
  5. 逗号操作符将两个或多个表达式分割开来。这些表达式自左向右逐个进行求值,整个逗号表达式的值就是最后那个表达式的值。

参考链接

https://www.runoob.com/cprogramming/c-operators.html
http://news.eeworld.com.cn/mcu/2018/ic-news112242120.html

你可能感兴趣的:(C语言)