• 运算符、优先级、结合性


     分类: 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……elsetest?A:B,test0A0B

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

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

    9、   求字节运算符:sizeof

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

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

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

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

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

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

    算术运算符

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

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

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

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

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

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

    赋值运算符和赋值表达式

    格式:变量=表达式;

    赋值运算符为右结合性,x=y=z=5x=(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+by=a+b,原因是因为逗号表达式的优先级是最低的,如果求逗号表达式的值,应该在外层加上括号,即y=((x=a+b),(b+c)),结果为x=a+by=b+c

    逗号表达式的特点:

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

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

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

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

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

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

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

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

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

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

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

    逻辑运算符的值:

    1都为真(1),为真(1

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

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

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

    优先级排列表格:

    优先级

    运算符

    名称

    运算对象个数

    结合性

    1

    ()

    圆括号

     

    []

    下标运算符

     

    ->

    指向成员运算符

     

    .

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

     

    2

    !

    逻辑非

    逻辑运算符

    单目运算符

    ~

    按位取反

    位运算符

    ++

    自增1

    算术运算符

    --

    自减1

    -

    负号

    类型

    强制类型转换

    *

    指针运算符

    &

    取地址运算符

    sizeof

    求存储长度运算符

    3

    *

    乘运算符

    算术运算符

    双目运算符

    /

    除运算符

    %

    余运算符

    4

    +

    加运算符

    算术运算符

    双目运算符

    -

    减运算符

    5

    <<

    左移运算符

    位运算符

    双目运算符

    >>

    右移运算符

    6

    >

    大于运算符

    关系运算符

    双目运算符

    <

    小于运算符

    >=

    大于等于运算符

    <=

    小于等于运算符

    7

    ==

    等于运算符

    双目运算符

    !=

    不等于运算符

    8

    &

    按位与运算符

    位运算符

    双目运算符

    9

    ^

    按位异或运算符

    双目运算符

    10

    |

    按位或运算符

    双目运算符

    11

    &&

    与运算符

    逻辑运算符

    双目运算符

    12

    ||

    或运算符

    双目运算符

    13

    ? :

    条件运算符

    三目运算符

    14

    =

    赋值运算符

    双目运算符

    +=

    -+

    *=

    /=

    %=

    >>=

    <<=

    &=

    ^=

    |=

    15

    ,

    逗号运算符

     

     

  • 相关阅读:
    为了博多
    [JSOI2008]星球大战starwar
    【网络流24题】最小路径覆盖问题
    【中学高级水题本】关路灯
    【网络流24题】分配问题
    【网络流24题】方格取数问题
    【网络流24题】汽车加油行驶
    [洛谷P2057][bzoj1934]善意的投票(最大流)
    LeetCode(38) Count and Say
    LeetCode(36)Valid Sudoku
  • 原文地址:https://www.cnblogs.com/zqz365001/p/4491885.html
Copyright © 2020-2023  润新知