运算符、优先级、结合性

分类: C/C++

C语言语句分为5类:

1、   表达式语句

2、   函数调用语句

3、   控制语句

4、   复合语句

5、   空语句

表达式语句:表达式+分号;

函数调用语句:函数名+实际参数+分号;格式一般为:函数名(参数表);

控制语句

条件判断语句

    if语句,switch语句

循环执行语句

    do while语句,while语句,for语句

转向语句

    break语句,goto语句,continue语句,return语句

复合语句

多个语句用{}括起来,组成复合语句,其中每条语句都以;结束,但}外不能加分号;

空语句:只有分号;的语句

赋值语句:属于表达式语句,注意事项如下:

1、   允许嵌套

2、   与为变量赋初值有区别,赋初值是变量说明的一部分,与其他变量要用逗号分隔,而赋值语句需要用分号;结束

3、   变量说明不允许中的赋初值不允许连续赋初值,如int a=b=c=5;是错误的,但赋值语句a=b=c=5是正确的。

4、   注意赋值表达式和赋值语句的区别。赋值表达式是一种表达式,它可以出现在任何允许表达式出现的地方,而赋值语句则不能。

如if ((x=y+5)>0) z=x;是正确的,而if((x=y+5;)>0) z=x;是错误的。

优先级与结合性

一般情况下,单目运算符级别较高,赋值运算符级别较低

算术运算符较高,关系和逻辑运算符优先级较低

结合性分为左结合和右结合两种

表达式:由运算符连接常量、变量、函数所组成的式子,每个表达式都有一个值和类型,表达式值按运算符优先级和结合性所规定顺序进行

运算符有优先级,而且有特点,就是他的结合性

运算量参与运算的先后顺序不仅要遵守运算符优先级的规定,还要受运算符结合性的制约,以便决定是由左向右运算还是由右向左运算。

运算符分类:

1、   算术运算符:+ - * / 求余(%,也称模运算) ++ --

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

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

4、   位运算符:位与 & 位或 | 位非 ! 位异或 ^ 左移 << 右移 >>

5、   赋值运算符:简单运算符=,复合算术运算符:+= -= *= /=,复合位运算符:&=  |=  ^=  >>= <<=

6、   条件运算符:这是一个三目运算符,用于条件求值 ? :,相当于if……else即test?A:B,test非0则A,0则B;

7、   逗号运算符:,用于把若干表达式组合成一个表达式

8、   指针运算符:取内容(*),取地址(&)

9、   求字节运算符:sizeof

10、特殊运算符:() [] 成员-> .

优先级:运算符优先级共15级,1级最高,15级最低

优先级高的先运算,低的后运算,如果运算量两端的运算符优先级相同,则按运算符的结合性所规定的方向处理

结合性:分为两种即左结合性(自左向右)和右结合性(自右向左)

例如:算术运算符结合性为左结合性

赋值运算符为右结合性,如x=y=z,先执行y=z,然后执行x=(y=z)

算术运算符

+ 加法运算符:为双目运算符,具有左结合性

- 减法运算符:为双目运算符,具有左结合性,如果为负值运算符,则为单目,左结合性

* 乘法运算符:为双目运算符,左结合性

/ 除法运算符:为双目运算符,左结合性,运算中都为整数,结果由舍去小数,结果为整数,如果运算中有实型量,则结果为双精度型,即使结果值(指等号右边)为整型/float/double ,也符合上述原则

% 求余运算符:双目运算符,左结合,要求参与运算的量均为整数,结果为二数相除后的结果

++ --运算符:自增/自减,单目运算符,右结合性,例:++d,d++,运算的结果不是同的,由于其为右结合,所以第一个首先进行自增运算,如果用printf输出,结果为d加1,而后都是先输出结果,然后自增1,还要注意的一点是:printf函数的计算是从右到左进行计算

赋值运算符和赋值表达式

格式:变量=表达式;

赋值运算符为右结合性,x=y=z=5与x=(y=(z=5)))是相同的。

=在C中为运算符,而且组成赋值表达式,凡是表达式出现的地方均可出现赋值表达式,C中规定只要加上分号;即表示形成了语句

在赋值过程中,如果赋值语句两边的数据类型不同,系统将自动进行类型转换,即把赋值符右边的类型转为赋值符左边的类型,规定如下:

1、   实型赋与整型,舍去小数,不进行四舍五入

2、   整型赋与实型,数值不变,但以浮点数形式存放,即增加了小数位数

3、   字符型赋整型,字符型为1个字节,整型为2个字节,所以将字符型的ASCII码放到整型的低8位,高8位以0补齐

4、   整型赋与字符型,字符型为1个字节,整型为2个字节,仅有低8位有效

复合赋值符及表达式

在=左边加上其他的双目运算符即可构成复合赋值符

如+= -= *= /= <<= >>=&= |= %= 等

逗号运算符

把两个表达式连接起来,组成一个表达式,称为逗号表达式

格式:表达式1,表达式2,求值过程分别求两个表达式的值,并以表达式2的值做为整个逗号表达式的值

y=(x=a+b),(b+c),实际结果为x=a+b,y=a+b,原因是因为逗号表达式的优先级是最低的,如果求逗号表达式的值,应该在外层加上括号,即y=((x=a+b),(b+c)),结果为x=a+b,y=b+c

逗号表达式的特点:

1、   可以嵌套,即表达式1、表达式2都可以是另一个逗号表达式

2、   程序中使用逗号表达式值,通过是要分别求逗号表达式内各表达式的值,并不一定需要整个逗号表达式的值

3、   并非所有出现逗号的地方都组成逗号表达式,如变量说明就非逗号表达式

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

是双目运算符,左结合,关系运算符优先级低于算术运算符,但高于赋值运算符,其中 < > >= <=优先级相同,==与!=优先级相同,但低于前者

格式:表达式1 关系运算符 表达式2,关系表达式允许嵌套,其值为0或1,例如:k==j==i+5,设k=5,j=4,i=3,计算顺序为:先计算i+5=8,然后比较k==j,返回值为0,然后比较0==i+5,即0==8,最后返回为0

逻辑运算符:有三种 && || !

前两者为双目运算符,后者为单目运算符

前两者为左结合,后者为右结合

== != > < >= <= 优先级高于&& 和 ||,低于!,算术运算符高于 > < >= <= == !=,但低于!

单目运算符高于多目运算符

逻辑运算符的值:

1、& 都为真(1),为真(1)

2、| 有一个为真(1),为真(1)

3、! 参与量为真(1),返回假(0),参与量为假(0),返回真(1)

逻辑表达式的格式:表达式1 逻辑表达式 表达式2,允许嵌套。

优先级排列表格:


优先级


运算符


名称


运算对象个数


结合性


1


()


圆括号



[]


下标运算符


->


指向成员运算符


.


结构体、共用体成员运算符


2


!


逻辑非


逻辑运算符


单目运算符



~


按位取反


位运算符


++


自增1


算术运算符


--


自减1


-


负号


类型


强制类型转换


*


指针运算符


&


取地址运算符


sizeof


求存储长度运算符


3


*


乘运算符


算术运算符


双目运算符



/


除运算符


%


余运算符


4


+


加运算符


算术运算符


双目运算符



-


减运算符


5


<<


左移运算符


位运算符


双目运算符



>>


右移运算符


6


>


大于运算符


关系运算符


双目运算符



<


小于运算符


>=


大于等于运算符


<=


小于等于运算符


7


==


等于运算符


双目运算符



!=


不等于运算符


8


&


按位与运算符


位运算符


双目运算符



9


^


按位异或运算符


双目运算符



10


|


按位或运算符


双目运算符



11


&&


与运算符


逻辑运算符


双目运算符



12


||


或运算符


双目运算符



13


? :


条件运算符


三目运算符



14


=


赋值运算符


双目运算符



+=


-+


*=


/=


%=


>>=


<<=


&=


^=


|=


15


,


逗号运算符


时间: 2024-08-07 00:14:02

运算符、优先级、结合性的相关文章

c/c++ 运算符 优先级 结合性 记录

1. ||  &&  是右结合性 2. ++ -- 是整个表达式运算结束或开始前计算的.不只是一个运算符后. int i=1,j; j=i+++i+++i++;    i=4,j=3; int i=1,m; m=++i+++i+++i;   i=4,m=12; 3.a+++b; 结果是(a++)+b还是a+(++b)呢?答案是前者,因为在遇到这种情况时,C编译器会将表达式按照从左往右的顺序尽量匹配出一个子表达式,所以当C编译器遇到a且后面有3个+号时,会首先尝试匹配a+++,当然这是没有意

C之旅(一)运算符——优先级,结合性和求值顺序

本节主要讲基本运算符的优先级,结合性和求值顺序.先看一个表达式- (1 + 2) * 3 + (4 + 5 * (6 + 7 ))记住你对它的运算过程,看完下面的内容之后,也许你会用不同的方式来看待这个表达式. 基本运算符 = + - * / C中没有指数运算.运算符操作的是操作数,操作数就是放在运算符两侧的东西. (1) 赋值运算符 = year = 2016; 读作将值2016赋给year,而非year等于2016.=将2016赋给变量year,是从右到左的,即=具有右结合性.2016 =

【C知识点】C 运算符优先级和结合性y

1.C语言的运算符优先级有15个,如下图所示. 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 调用函数,数组 结构体成员选择符 () 圆括号 (表达式)/函数名(形参表)   . 成员选择(对象) 对象.成员名   -> 成员选择(指针) 对象指针->成员名   2 - 负号运算符 -表达式 右到左 单目运算符 优先级别仅此前者 (类型) 强制类型转换 (数据类型)表达式   ++ 自增运算符 ++变量名/变量名++ -- 自减运算符

C语言运算符优先级及结合性

今天去翻了下C语言运算符的优先级和结合性,发现当初学习的时候就没认真记住,惭愧.发现一篇讲得不错的文章,编辑了下转来供以后翻阅. C语言运算符优先级表(由上至下,优先级依次递减) 运算符 结合性 () [] -> . 自左向右 ! ~ ++ -- - (type) * & sizeof 自右向左 * / % 自左向右 + - 自左向右 << >> 自左向右 < <= > >= 自左向右 == != 自左向右 & 自左向右 ^ 自左向右

C运算符优先级和结合性

C中运算符优先级和结合性一览表: 在上表中能总结出一下规律: (1)结合方向只有三个是从右往左,其余都是从左往右: (2)逗号运算符的优先级最低: (3)对于优先级,有一个普遍规律:算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符,逻辑运算符中的“!”除外. 下图是一些容易出错的优先级问题: 原文地址:https://www.cnblogs.com/Cqlismy/p/11773674.html

C语言运算符优先级和结合性一览表

所谓优先级就是当一个表达式中有多个运算符时,先计算谁,后计算谁.这个其实我们在小学学算术的时候就学过,如1+4÷2. 但是C语言中的运算符已经远不止四则运算中的加减乘除了,还有其他很多运算符.当它们出现在同一个表达式中时先计算谁后计算谁呢?所以本节还是有必要讲一下的.最后我还会将所有运算符展示出来,然后告诉你哪个优先级高.哪个优先级低. 首先不需要专门记忆,也没有必要.因为作为初学者,哪个优先级高.哪个优先级低我们很难记住.就算死记硬背记住了,时间长不用也会忘记.所以当一个表达式中有多个运算符时

运算符优先级

1        算术运算符       单目 >双目 >三目 2        关系运算符 3        逻辑运算符      &&高于||      !算术还高高 一共有十五个优先级: 1   ()  []  .  -> 2   !  ~   -(负号) ++  --   &(取变量地址)*   (type)(强制类型)    sizeof 3   * / % 4   + - 5   >> << 6   > >= <

Java运算符优先级(转)

Java运算符优先级 序列号 符号 名称 结合性(与操作数) 目数 说明 1 . 点 从左到右 双目   ( ) 圆括号 从左到右     [ ] 方括号 从左到右     2 + 正号 从右到左 单目   - 负号 从右到左 单目   ++ 自增 从右到左 单目 前缀增,后缀增 - - 自减 从右到左 前缀减,后缀减 ~ 按位非/取补运算 从右到左 单目   ! 逻辑非 从右到左 单目 “!”不可以与“=”联用 3 * 乘 从左到右 双目   / 除 从左到右 双目 整数除法:取商的整数部分,

运算符优先级常识

引用:http://www.cnblogs.com/fengkuangIT/p/4423437.html 1        算术运算符       单目 >双目 >三目 2        关系运算符 3        逻辑运算符      &&高于||      !算术还高高 一共有十五个优先级: 1   ()  []  .  -> 2   !  ~   -(负号) ++  --   &(取变量地址)*   (type)(强制类型)    sizeof 3   *

PHP中运算符优先级

运算符优先级指定了两个表达式绑定得有多“紧密”.例如,表达式 1 + 5 * 3 的结果是 16 而不是 18 是因为乘号(“*”)的优先级比加号(“+”)高.必要时可以用括号来强制改变优先级.例如:(1 + 5) * 3 的值为 18. 如果运算符优先级相同,那运算符的结合方向决定了该如何运算.例如,"-"是左联的,那么 1 - 2 - 3 就等同于 (1 - 2) - 3 并且结果是 -4. 另外一方面,"="是右联的,所以 $a = $b = $c 等同于 $