(九)C语言之运算符

目录

1、运算符的概念

2、算术运算符

2.1  +、-、* 运算符

2.2 / 运算符:取整运算符(或 除法)

2.2.1 运算对象为整数时,/ 代表取整的意思

2.2.2 运算符对象为实型时,/ 代表除法

2.3 % 运算符:取余运算符 

2.4 +=、-=、*=、/=、%= 运算符

2.5 = 赋值运算符

3、关系运算符

4、逻辑运算符

4.1 && 逻辑与

4.2 || 逻辑或

4.3 ! 逻辑非

5、位运算符

5.1 & 按位与

5.2 | 按位或

5.3 ~ 按位取反

5.4 ^ 按位异或

5.5 位移运算符

5.5.1 << 左移运算符

 5.5.2 >> 右移运算符

 5.6 将指定位清0或置1(必看)

6、三目运算符

7、逗号运算符

8、自增自减运算符

8.1 ++ --在变量后面

8.2 ++ --在变量前面

9、运算符的优先级


1、运算符的概念

什么叫运算符,运算赋就是进行计算,对比之类的符号。

运算对象可以是常量、变量、函数返回值 

运算符分为单目运算符,双目运算符,三目运算符等

单目运算符:只需要一个运算对象的运算符为单目运算符。如:a++

双目运算符:需要两个运算对象的运算符为双目运算符。如:a+b

三目运算符:需要三个运算对象的运算符为三目运算符。如:a>b?c:d

2、算术运算符

算术运算符有:+、-、*、/、%、+=、-+、*=、/=、%=、=

2.1  +、-、* 运算符

+:加法

-:减法

*:乘法

2.2 / 运算符:取整运算符(或 除法)

2.2.1 运算对象为整数时,/ 代表取整的意思

2.2.2 运算符对象为实型时,/ 代表除法

2.3 % 运算符:取余运算符 

 %运算法一般用来判断是否能被整除,能被整除的数余数为0;

规律:n%2的余数范围:0~1

           n%3的余数范围:0~2

           n%4的余数范围:0~3

           n%m的余数范围:0 ~ m-1

2.4 +=、-=、*=、/=、%= 运算符

2.5 = 赋值运算符

格式:变量名 = 值;

一般用来进行赋值操作的,将值放到变量名所代表的空间中

int data;

//赋值
data = 10;

注:在C语言中 等于 是 == ,而 赋值 是 = 。

3、关系运算符

关系运算符有:>、<、==、>=、<=、!=

>:大于

<:小于

==:等于

>=:大于等于

<=:小于等于

!=:不等于

注:关系运算符一般用于逻辑条件判断或者是循环语句条件判断

4、逻辑运算符

逻辑运算符有:&&、||、!

4.1 && 逻辑与

aba && b

注意:逻辑与的短路特性:a&&b        若a为真后,才执行b语句判断真假;若a为假,则a&&b就为假,不会执行b语句。

 4.2 || 逻辑或

aba || b

注意:逻辑或的短路特性:a||b        若a为假后,才执行b语句判断真假;若a为真,则a||b就为真,不会执行b语句。

 4.3 ! 逻辑非

!真 == 假                !假==真

在C语言中,只有0代表假,其他的都为真

例:!-10==0        !0==1        !1==0

5、位运算符

位运算符有:&、|、~、^、<<、>>

位运算符是用来计算二进制位的操作符。

5.1 & 按位与

规则:有0为0,全1为1

特点:和1与保持不变,和0与变为0

场景:将指定位清0

例:

  0010 1100
  1001 1010  &
--------------
  0000 1000

5.2 | 按位或

规则:有1为1,全0为0

特点:和0或全为0,只要有1就为1

场景:将指定位清1

例:

  0010 1100
  1001 1010  |
--------------
  1011 1110

5.3 ~ 按位取反

规则:1变0,0变1

  1001 1010  ~
--------------
  0110 0101

5.4 ^ 按位异或

规则:相同为0,不同为1

特点:和1异或取反,和0异或不变

场景:将至定位翻转

  1100 0011
  0000 1111   ^
---------------
  1100 1100

5.5 位移运算符

5.5.1 << 左移运算符

向左边移动,右边补0,左边舍弃

注意:左移数必须小于等于自身位数

 5.5.2 >> 右移运算符

向右边移动,右边舍弃,左边补0或1。

无符号数右移:右边舍弃,左边补0

有符号数右移:

                        正数:右边丢弃,左边补0(逻辑右移)

                        负数:右边丢弃,左边补1(算数右移)

问:什么时候是逻辑右移,什么时候是算数右移?

答:逻辑右移和算数右移是由编译器决定。

 5.6 将指定位清0或置1(必看)

例1:定义unsigned char num;将num的第2,3位清0,其他位保持不变

num = num & 1111 0011

        = num & ~(0000 1100)

        = num & ~(0000 1000 | 0000 0100)

        = num & ~(0000 0001 << 3 | 0000 0001<< 2)

        = num & ~(0x01 << 3 | 0x01 << 2)

 例2:定义unsigned char num;将num的第5,6位置1,其他位保持不变

 num = num | 0110 0000

         = num | (0100 0000 | 0010 0000)

         = num | (0000 0001 << 6 | 0000 0001 << 5)

         = num | (0x01 << 6 | 0x01 << 5)

例3: 定义unsigned char num,将num的第3 ,4位置1 ,7,8位清0,其他位保持不变

num = num | (0x01 << 2 | 0x01 << 4);//3,4位置1

num = num & ~ (0x01 << 7 | 0x01 << 8);//7,8位清0

6、三目运算符

格式: 表达式?值1:值2 

含义:如果表达式为真,则执行值1;如果表达式为假,则执行值2

7、逗号运算符

格式:值1,值2,值3,值4

含义:先执行值1,然后执行值2,以此类推

注意:逗号运算符的优先级是最低的

8、自增自减运算符

自增自减运算符属于单目运算符。

格式:++   --

8.1 ++ --在变量后面

++ --在变量后面,表示先使用变量,后自增自减

8.2 ++ --在变量前面

 ++ --在变量前面,表示先自增自减,后使用变量

9、运算符的优先级

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

-----

()

圆括号

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

-----

.

成员选择(对象)

对象.成员名

-----

->

成员选择(指针)

对象指针->成员名

-----

2

-

负号运算符

-表达式

右到左

单目运算符

(类型)

强制类型转换

(数据类型)表达式

-----

++

前置自增运算符

++变量名

单目运算符

++

后置自增运算符

变量名++

单目运算符

--

前置自减运算符

--变量名

单目运算符

--

后置自减运算符

变量名--

单目运算符 [4] 

*

取值运算符

*指针变量

单目运算符

&

取地址运算符

&变量名

单目运算符

!

逻辑非运算符

!表达式

单目运算符

~

按位取反运算符

~表达式

单目运算符

sizeof

长度运算符

sizeof(表达式)

-----

3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

双目运算符

%

余数(取模)

整型表达式/整型表达式

双目运算符

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

双目运算符

5

<<

左移

变量

左到右

双目运算符

>>

右移

变量>>表达式

双目运算符

6

>

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

双目运算符

<

小于

表达式

双目运算符

<=

小于等于

表达式

双目运算符

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

双目运算符

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

13

?:

条件运算符

表达式1? 表达式2: 表达式3

右到左

三目运算符

14

=

赋值运算符

变量=表达式

右到左

-----

/=

除后赋值

变量/=表达式

-----

*=

乘后赋值

变量*=表达式

-----

%=

取模后赋值

变量%=表达式

-----

+=

加后赋值

变量+=表达式

-----

-=

减后赋值

变量-=表达式

-----

<<=

左移后赋值

变量

-----

>>=

右移后赋值

变量>>=表达式

-----

&=

按位与后赋值

变量&=表达式

-----

^=

按位异或后赋值

变量^=表达式

-----

|=

按位或后赋值

变量|=表达式

-----

15

,

逗号运算符

表达式,表达式,…

左到右

从左向右顺序运算

该表摘选自:运算符优先级_百度百科 (baidu.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值