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


     c 和c++ 中大部分运算符的优先级和结合性是一致的,但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;

    在c/c++语言中为了避免产生二义性,如果一个字符串能够解释为多个操作符,c/c++语言编译器将按照“构成操作符的字符个数越多越好”的原则来作出选择。根据这一原则 解释为 a++ ++ + b; 这就不是一个合法的表达式了。但只要加上空格 a++ + ++b;就合法了。

    4.运算符的优先级和求值顺序

    int x,y,z;

    x=y=z=1;

    ++x || ++y && ++z;

    结果为 x = 2,y=1,z=1.因为“||”操作符的左操作数是TRUE,所以没有必要继续求值了。事实上,c/c++语言肯定不会继续求值--按照c/c++语言里的有关规则,在按从左到右的顺序对一个逻辑表达式求值的时候,只要知道了他的实际结果,就不会再对其余部分求值。

     

     

    C语言运算符优先级

    优先级

    运算符

    名称或含义

    使用形式

    结合方向

    说明

    1

    []

    数组下标

    数组名[常量表达式]

    左到右

    --

    ()

    圆括号

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

    --

    .

    成员选择(对象)

    对象.成员名

    --

    ->

    成员选择(指针)

    对象指针->成员名

    --

    2

    -

    负号运算符

    -表达式

    右到左

    单目运算符

    ~

    按位取反运算符

    ~表达式

    ++

    自增运算符

    ++变量名/变量名++

    --

    自减运算符

    --变量名/变量名--

    *

    取值运算符

    *指针变量

    &

    取地址运算符

    &变量名

    !

    逻辑非运算符

    !表达式

    (类型)

    强制类型转换

    (数据类型)表达式

    --

    sizeof

    长度运算符

    sizeof(表达式)

    --

    3

    /

    表达式/表达式

    左到右

    双目运算符

    *

    表达式*表达式

    %

    余数(取模)

    整型表达式%整型表达式

    4

    +

    表达式+表达式

    左到右

    双目运算符

    -

    表达式-表达式

    5

    << 

    左移

    变量<<表达式

    左到右

    双目运算符

    >> 

    右移

    变量>>表达式

    6

    大于

    表达式>表达式

    左到右

    双目运算符

    >=

    大于等于

    表达式>=表达式

    小于

    表达式<表达式

    <=

    小于等于

    表达式<=表达式

    7

    ==

    等于

    表达式==表达式

    左到右

    双目运算符

    !=

    不等于

    表达式!= 表达式

    8

    &

    按位与

    表达式&表达式

    左到右

    双目运算符

    9

    ^

    按位异或

    表达式^表达式

    左到右

    双目运算符

    10

    |

    按位或

    表达式|表达式

    左到右

    双目运算符

    11

    &&

    逻辑与

    表达式&&表达式

    左到右

    双目运算符

    12

    ||

    逻辑或

    表达式||表达式

    左到右

    双目运算符

    13

    ?:

    条件运算符

    表达式1?

    表达式2: 表达式3

    右到左

    三目运算符

    14

    =

    赋值运算符

    变量=表达式

    右到左

    --

    /=

    除后赋值

    变量/=表达式

    --

    *=

    乘后赋值

    变量*=表达式

    --

    %=

    取模后赋值

    变量%=表达式

    --

    +=

    加后赋值

    变量+=表达式

    --

    -=

    减后赋值

    变量-=表达式

    --

    <<=

    左移后赋值

    变量<<=表达式

    --

    >>=

    右移后赋值

    变量>>=表达式

    --

    &=

    按位与后赋值

    变量&=表达式

    --

    ^=

    按位异或后赋值

    变量^=表达式

    --

    |=

    按位或后赋值

    变量|=表达式

    --

    15

    逗号运算符

    表达式,表达式,…

    左到右

    --

     

    c++运算符优先级和结合性

    C++运算符优先级表
    优先级运算符说明结合性
    1 :: 范围解析 自左向右
    2 ++   -- 后缀自增/后缀自减
    () 括号
    [] 数组下标
    . 成员选择(对象)
    −> 成员选择(指针)
    3 ++   -- 前缀自增/前缀自减 自右向左
    +   − 正/负号
    !   ~ 逻辑非/按位取反
    (type) 强制类型转换
    * 取指针指向的值
    & 某某的地址
    sizeof 某某的大小
    new, new[] 动态内存分配/动态数组内存分配
    delete, delete[] 动态内存释放/动态数组内存释放
    4 .*   ->* 成员对象选择/成员指针选择 自左向右
    5 *   /   % 乘法/除法/取余
    6 +   − 加号/减号
    7 <<   >> 位左移/位右移
    8 <   <= 小于/小于等于
    >   >= 大于/大于等于
    9 ==   != 等于/不等于
    10 & 按位与
    11 ^ 按位异或
    12 | 按位或
    13 && 与运算
    14 || 或运算
    15 ?: 三目运算符 自右向左
    16 = 赋值
    +=   −= 相加后赋值/相减后赋值
    *=   /=   %= 相乘后赋值/相除后赋值/取余后赋值
    <<=   >>= 位左移赋值/位右移赋值
    &=   ^=   |= 位与运算后赋值/位异或运算后赋值/位或运算后赋值
    17 throw 抛出异常
    18 , 逗号 自左向右
  • 相关阅读:
    Linux系统中pssh系列工具的使用
    Linux软件包管理和磁盘管理实践
    Linux系统自动化安装之pxe实现
    Linux系统SSH服务基于key认证实践
    Linux系统文本处理之awk数组实践
    Linux访问控制列表
    Linux系统中SSH端口转发
    (转)python的range()函数用法
    Python 学习之list和Tuple类型
    List<String> 和 ArrayList<String>的区别
  • 原文地址:https://www.cnblogs.com/zc347656462/p/5830117.html
Copyright © 2020-2023  润新知