常见运算符极其优先级

        大家在日常写代码或做编程题时往往被运算符的优先级所困。这里我们来系统的了解运算符常见的类型和优先级关系。希望对大家有所帮助。

优先级

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[ ]

数组下标

数组名[常量表达式]

左到右

--

( )

圆括号

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

--

.

成员选择(对象)

对象.成员名

--

->

成员选择(指针)

对象指针->成员名

--

2

-

负号运算符

-表达式

右到左

单目运算符

~

按位取反运算符

~表达式

++

自增运算符

++变量名/变量名++

--

自减运算符

--变量名/变量名--

*

取值运算符

*指针变量

&

取地址运算符

&变量名

!

逻辑非运算符

!表达式

(类型)

强制类型转换

(数据类型)表达式

--

sizeof

长度运算符

sizeof(表达式)

单目运算符

3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

%

余数(取模)

整型表达式%整型表达式

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

5

<< 

左移

变量<<表达式

左到右

双目运算符

>> 

右移

变量>>表达式

6

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

小于

表达式<表达式

<=

小于等于

表达式<=表达式

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

13

 ? : ;

条件运算符

表达式1?

表达式2: 表达式3

右到左

三目运算符

14

=

赋值运算符

变量=表达式

右到左

--

/=

除后赋值

变量/=表达式

--

*=

乘后赋值

变量*=表达式

--

%=

取模后赋值

变量%=表达式

--

+=

加后赋值

变量+=表达式

--

-=

减后赋值

变量-=表达式

--

<<=

左移后赋值

变量<<=表达式

--

>>=

右移后赋值

变量>>=表达式

--

&=

按位与后赋值

变量&=表达式

--

^=

按位异或后赋值

变量^=表达式

--

|=

按位或后赋值

变量|=表达式

--

15

逗号运算符

表达式,表达式,…

左到右

--

简单记忆:优先级 单目运算符>双目运算符>三目运算符>赋值运算符>逗号运算符 

常见十大运算符

1、算数运算符

算数运算符用于数值计算。常见的算数运算符如下:

双目运算符:加(+)  减(-)  乘(*)  除(/)  取模(或称取余%)   

单目运算符:自增(++)  自减(--)  负号(-)

下面这篇文章来详细区分前置++和后置++的区别

 文章:区分a++ , ++a

2、关系运算符

关系运算符用于比较运算。常见的关系运算符如下:

大于(>)  小于(<)  等于(==)   大于等于(>=)  小于等于(<=)  不等于(!=)   (这些都为双目运算符)

3、逻辑运算符

逻辑运算符用于逻辑运算。常见的逻辑运算符如下:

非(!)  与(&&)  或(||) 

优先级为非>与>或  (简单记忆为not and or) 

4、位操作运算符

 位操作运算符参与运算的量,按二进制位进行运算。常见的位操作符如下:

1)、按位与运算符(&相乘)

参加运算的两个数据,按二进制位进行“与”运算。

运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;

 这里简单记忆为两数相乘   

2)、按位或运算符(|相加)

参加运算的两个数据,按二进制进行“或”操作。

运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1;

 这里简单记忆为两数相加,且取最后一位   

 3)、 按位非运算符(~取反)

 计算机在计算负数时引入了补码的概念,而负数的补码就是其反码+1

估按位非操作就是操作数的负值-1,即~x=x*(-1)-1=-(x+1)。

运算规则:转二进制补码,取反(即0变1, 1变0)

 下面就对原码、反码、补码做个简单的解释:

正数的原码、反码和补码一致都为原数值的二进制数

下面以3为例 

3的原码:0000 0011(第一个是符号位,0表示+,1表示-)

计算机里面存的3的样子: 3的补码:0000 0011(由于3是正数,正数的原码补码反码都是一样的)

则~3在计算机中的形式为: ~3的补码:1111 1100(就是把3的补码所有位数全部取反)
~3的反码:1111 1011(补码=反码+1)
~3的原码:1000 0100(符号位为1,不变,其他位取反,即-4)

负数的原码、反码和补码: 

       原码即原来的数值的二进制数第一位一般代表符号位

       反码即原码各个位数取反

       补码即在反码的基础上+1

下面以-7为例了解原码、反码和补码 

-7的原码:1000 0111(第一个是符号位,0表示+,1表示-)

-7的反码:1111 1000(由于-7是负数,反码需要取反)

计算机里面存的-7的样子:-7的补码:1111 1001(补码=反码+1)

则~-7在计算机中的形式为: ~-7的补码:0000 0110(把-7的补码所有位数全部取反)
~-7的原码:0000 0110(补码符号位为0,正数的原码=反码=补码,即6)

4)、按位异或运算符(^) 

参加运算的两个数据,按二进制位进行“异或”运算。

运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;

 这里简单记忆为各个位数相加逢2变0,不进位   

5)、左移运算符(<<) 

 规则:        

                1.将操作数先转换为二进制数(补码);

                2.二进制数各位左移若干位(移动位数);

                3.在低位补若干个0;

                4.高位左移后溢出,舍弃不起作用;

例如:

        7 << 2

        7转换为二进制:0000 0111,每位向左移动两位变为:0001 1100,转换为十进制数为28。 

6)、右移运算符  (>>)

 规则:        

                1.将操作数先转换为二进制数(补码);

                2.二进制数各位右移若干位(移动位数);

                3.移出的低位舍弃,并在高位进行补位;

                注意:关于补位的问题

                        1.操作数若为无符号数,则在左边补若干个0;

                        2.操作数若为有符号正数,则在左边补若干个0;

                        3.操作数若为有符号负数,左边补1为算术右移,左边补0为逻辑右移;

例如: 

        -7 >> 2

        7转换为二进制补码:1111 1001,每位向右移动两位变为:1111 1110,转换为十进制数为-2.这里值得注意的一点,当-7右移位数超过3位时,结果都为1111 1111,转换为十进制一直都是-1;

5、赋值运算符

赋值运算符用于赋值运算。常见的赋值运算符如下:

简单赋值(=)
复合算术赋值(+=,-=,*=,/=,%=)
复合位运算赋值(&=,|=,^=,>>=,<<=) 

以上均为双目运算符

6、条件运算符

条件运算符这是一个三目运算符,用于条件求值( ? : )

条件运算符优先级高于赋值、逗号运算符,低于其他运算符

条件运算符的一般使用形式:

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

举如下例子: 

max = a < b? b: a;

等效如下条件判断语句: 

if (a<b)
    max = b;
else
    max = a;

7、逗号运算符

逗号运算符用于把若干表达式组合成一个表达式( , )

C 语言中,逗号(,)也可以是运算符,称为逗号运算符(Comma Operator)。逗号运算符可以把两个以上(包含两个)的表达式连接成一个表达式,称为逗号表达式。其一般形式为: 

 子表达式1, 子表达式2, …, 子表达式n

8、指针运算符

指针运算符用于取内容(*)和取地址(&)二种运算。 

&:取地址运算符,它返回运算对象的内存地址。

*: 指针运算符,也称为“间接引用操作符”,它返回指针指的变量的值。

9、长度运算符

长度运算符用于计算数据类型所占的字节数(sizeof)。

sizeof是c语言的一种单目操作符,如c语言的其他操作符++、--等。并且它并不是一个函数,sizeof的操作符以字节的形式给出了操作数的储存大小(操作数可以是一个表达式或括号里的类型名)并其储存的大小有操作数的类型决定,和本身无关系。 

⑴用于数据类型
sizeof的使用形式:sizeof(char)

注意数据类型必须用括号。

⑵用于变量
sizeof使用形式:sizeof(a)或者sizeof a都是正确的形式,但是大多的人都会带上括号。

sizeof的操作符不能用于函数类型,不完全类型。不完全类型是指具有未知储存大小的数据类型,如未知储存大小的数组类型、未知内容的结构或联合类void类型。

10、特殊运算符

特殊运算符有括号(),下标[],指向运算符(->)与 成员运算符(.)等几种。 

参考文献

[1]常见的十大运算符及其优先级

[2]C语言:左移运算符和右移动运算符

[3]C语言运算符优先级(超详细)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值