• C/C++知识补充(2) C/C++操作符/运算符的优先级 & 结合性


    优先级

    操作符

    描述

    例子

    结合性

    1

    ()
    []
    ->
    .
    ::
    ++
    --

    调节优先级的括号操作符
    数组下标访问操作符
    通过指向对象的指针访问成员的操作符
    通过对象本身访问成员的操作符
    作用域操作符
    后置自增操作符
    后置自减操作符

    (a + b) / 4;
    array[4] = 2;
    ptr->age = 34;
    obj.age = 34;
    Class::age = 2;
    for( i = 0; i < 10; i++ ) ...
    for( i = 10; i > 0; i-- ) ...

    从左到右

    2

    !
    ~
    ++
    --
    -
    +
    *
    &
    (type)
    sizeof

    逻辑取反操作符
    按位取反(按位取补)
    前置自增操作符
    前置自减操作符
    一元取负操作符
    一元取正操作符
    解引用操作符
    取地址操作符
    类型转换操作符
    返回对象占用的字节数操作符

    if( !done ) ...
    flags = ~flags;
    for( i = 0; i < 10; ++i ) ...
    for( i = 10; i > 0; --i ) ...
    int i = -1;
    int i = +1;
    data = *ptr;
    address = &obj;
    int i = (int) floatNum;
    int size = sizeof(floatNum);

    从右到左

    3

    ->*
    .*

    在指针上通过指向成员的指针访问成员的操作符
    在对象上通过指向成员的指针访问成员的操作符

    ptr->*var = 24;
    obj.*var = 24;

    从左到右

    4

    *
    /
    %

    乘法操作符
    除法操作符
    取余数操作符

    int i = 2 * 4;
    float f = 10 / 3;
    int rem = 4 % 3;

    从左到右

    5

    +
    -

    加法操作符
    减法操作符

    int i = 2 + 3;
    int i = 5 - 1;

    从左到右

    6

    <<
    >>

    按位左移操作符
    按位右移操作符

    int flags = 33 << 1;
    int flags = 33 >> 1;

    从左到右

    7

    <
    <=
    >
    >=

    小于比较操作符
    小于或等于比较操作符
    大于比较操作符
    大于或等于比较操作符

    if( i < 42 ) ...
    if( i <= 42 ) ...
    if( i > 42 ) ...
    if( i >= 42 ) ...

    从左到右

    8

    ==
    !=

    等于比较操作符
    不等于比较操作符

    if( i == 42 ) ...
    if( i != 42 ) ...

    从左到右

    9

    &

    按位与操作符

    flags = flags & 42;

    从左到右

    10

    ^

    按位异或操作符

    flags = flags ^ 42;

    从左到右

    11

    |

    按位或操作符

    flags = flags | 42;

    从左到右

    12

    &&

    逻辑与操作符

    if( conditionA && conditionB ) ...

    从左到右

    13

    ||

    逻辑或操作符

    if( conditionA || conditionB ) ...

    从左到右

    14

    ? :

    三元条件操作符

    int i = (a > b) ? a : b;

    从右到左

    15

    =
    +=
    -=
    *=
    /=
    %=
    &=
    ^=
    |=
    <<=
    >>=

    赋值操作符
    复合赋值操作符(加法)
    复合赋值操作符(减法)
    复合赋值操作符(乘法)
    复合赋值操作符(除法)
    复合赋值操作符(取余)
    复合赋值操作符(按位与)
    复合赋值操作符(按位异或)
    复合赋值操作符(按位或)
    复合赋值操作符(按位左移)
    复合赋值操作符(按位右移)

    int a = b;
    a += 3;
    b -= 4;
    a *= 5;
    a /= 2;
    a %= 3;
    flags &= new_flags;
    flags ^= new_flags;
    flags |= new_flags;
    flags <<= 2;
    flags >>= 2;

    从右到左

    16

    ,

    逗号操作符

    for( i = 0, j = 0; i < 10; i++, j++ ) ...

    从左到右

     

    Precedence

    Operator

    Description

    Example

    Associativity

    1

    ()
    []
    ->
    .
    ::
    ++
    --

    Grouping operator
    Array access
    Member access from a pointer
    Member access from an object
    Scoping operator
    Post-increment
    Post-decrement

    (a + b) / 4;
    array[4] = 2;
    ptr->age = 34;
    obj.age = 34;
    Class::age = 2;
    for( i = 0; i < 10; i++ ) ...
    for( i = 10; i > 0; i-- ) ...

    left to right

    2

    !
    ~
    ++
    --
    -
    +
    *
    &
    (type)
    sizeof

    Logical negation
    Bitwise complement
    Pre-increment
    Pre-decrement
    Unary minus
    Unary plus
    Dereference
    Address of
    Cast to a given type
    Return size in bytes

    if( !done ) ...
    flags = ~flags;
    for( i = 0; i < 10; ++i ) ...
    for( i = 10; i > 0; --i ) ...
    int i = -1;
    int i = +1;
    data = *ptr;
    address = &obj;
    int i = (int) floatNum;
    int size = sizeof(floatNum);

    right to left

    3

    ->*
    .*

    Member pointer selector
    Member pointer selector

    ptr->*var = 24;
    obj.*var = 24;

    left to right

    4

    *
    /
    %

    Multiplication
    Division
    Modulus

    int i = 2 * 4;
    float f = 10 / 3;
    int rem = 4 % 3;

    left to right

    5

    +
    -

    Addition
    Subtraction

    int i = 2 + 3;
    int i = 5 - 1;

    left to right

    6

    <<
    >>

    Bitwise shift left
    Bitwise shift right

    int flags = 33 << 1;
    int flags = 33 >> 1;

    left to right

    7

    <
    <=
    >
    >=

    Comparison less-than
    Comparison less-than-or-equal-to
    Comparison greater-than
    Comparison geater-than-or-equal-to

    if( i < 42 ) ...
    if( i <= 42 ) ...
    if( i > 42 ) ...
    if( i >= 42 ) ...

    left to right

    8

    ==
    !=

    Comparison equal-to
    Comparison not-equal-to

    if( i == 42 ) ...
    if( i != 42 ) ...

    left to right

    9

    &

    Bitwise AND

    flags = flags & 42;

    left to right

    10

    ^

    Bitwise exclusive OR

    flags = flags ^ 42;

    left to right

    11

    |

    Bitwise inclusive (normal) OR

    flags = flags | 42;

    left to right

    12

    &&

    Logical AND

    if( conditionA && conditionB ) ...

    left to right

    13

    ||

    Logical OR

    if( conditionA || conditionB ) ...

    left to right

    14

    ? :

    Ternary conditional (if-then-else)

    int i = (a > b) ? a : b;

    right to left

    15

    =
    +=
    -=
    *=
    /=
    %=
    &=
    ^=
    |=
    <<=
    >>=

    Assignment operator
    Increment and assign
    Decrement and assign
    Multiply and assign
    Divide and assign
    Modulo and assign
    Bitwise AND and assign
    Bitwise exclusive OR and assign
    Bitwise inclusive (normal) OR and assign
    Bitwise shift left and assign
    Bitwise shift right and assign

    int a = b;
    a += 3;
    b -= 4;
    a *= 5;
    a /= 2;
    a %= 3;
    flags &= new_flags;
    flags ^= new_flags;
    flags |= new_flags;
    flags <<= 2;
    flags >>= 2;

    right to left

    16

    ,

    Sequential evaluation operator

    for( i = 0, j = 0; i < 10; i++, j++ ) ...

    left to right

  • 相关阅读:
    下一代的前端构建工具:parcel打包react
    vue or react mvvm里的文字上下滚动
    CSS grid layout demo 网格布局实例
    js页面可视区域懒加载
    Vue双向绑定简单实现
    React Router 4.0中文快速入门
    Array.isArray() 和 isObject() 原生js实现
    60分钟课程: 用egg.js实现增删改查,文件上传和restfulApi, webpack react es6 (一)
    mirror.js 整合redux的好工具
    React-redux及异步获取数据20分钟快速入门
  • 原文地址:https://www.cnblogs.com/ArrozZhu/p/8383393.html
Copyright © 2020-2023  润新知