zoukankan      html  css  js  c++  java
  • c语言操作符优先级及ascii码备忘

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

    优先级

    运算符

    名称或含义

    使用形式

    结合方向

    说明

    1

    []

    数组下标

    数组名[常量表达式]

    左到右

     

    ()

    圆括号

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

     

    .

    成员选择(对象)

    对象.成员名

     

    ->

    成员选择(指针)

    对象指针->成员名

     

    2

    -

    负号运算符

    -表达式

    右到左

    单目运算符

    (类型)

    强制类型转换

    (数据类型)表达式

     

    ++

    自增运算符

    ++变量名
    变量名++

    单目运算符

    --

    自减运算符

    --变量名
    变量名--

    单目运算符

    *

    取值运算符

    *指针变量

    单目运算符

    &

    取地址运算符

    &变量名

    单目运算符

    !

    逻辑非运算符

    !表达式

    单目运算符

    ~

    按位取反运算符

    ~表达式

    单目运算符

    sizeof

    长度运算符

    sizeof(表达式)

     

    3

    /

    表达式 / 表达式

    左到右

    双目运算符

    *

    表达式*表达式

    双目运算符

    %

    余数(取模)

    整型表达式%整型表达式

    双目运算符

    4

    +

    表达式+表达式

    左到右

    双目运算符

    -

    表达式-表达式

    双目运算符

    5

    <<

    左移

    变量<<表达式

    左到右

    双目运算符

    >>

    右移

    变量>>表达式

    双目运算符

    6

    >

    大于

    表达式>表达式

    左到右

    双目运算符

    >=

    大于等于

    表达式>=表达式

    双目运算符

    <

    小于

    表达式<表达式

    双目运算符

    <=

    小于等于

    表达式<=表达式

    双目运算符

    7

    ==

    等于

    表达式==表达式

    左到右

    双目运算符

    !=

    不等于

    表达式!= 表达式

    双目运算符

    8

    &

    按位与

    表达式&表达式

    左到右

    双目运算符

    9

    ^

    按位异或

    表达式^表达式

    左到右

    双目运算符

    10

    |

    按位或

    表达式|表达式

    左到右

    双目运算符

    11

    &&

    逻辑与

    表达式&&表达式

    左到右

    双目运算符

    12

    ||

    逻辑或

    表达式||表达式

    左到右

    双目运算符

    13

    ?:

    条件运算符

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

    右到左

    三目运算符

    14

    =

    赋值运算符

    变量=表达式

    右到左

     

    /=

    除后赋值

    变量/=表达式

     

    *=

    乘后赋值

    变量*=表达式

     

    %=

    取模后赋值

    变量%=表达式

     

    +=

    加后赋值

    变量+=表达式

     

    -=

    减后赋值

    变量-=表达式

     

    <<=

    左移后赋值

    变量<<=表达式

     

    >>=

    右移后赋值

    变量>>=表达式

     

    &=

    按位与后赋值

    变量&=表达式

     

    ^=

    按位异或后赋值

    变量^=表达式

     

    |=

    按位或后赋值

    变量|=表达式

     

    15

    ,

    逗号运算符

    表达式,表达式,…

    左到右


    上表中可以总结出如下规律:
    1. 结合方向只有三个是从右往左,其余都是从左往右。
    2. 所有双目运算符中只有赋值运算符的结合方向是从右往左。
    3. 另外两个从右往左结合的运算符也很好记,因为它们很特殊:一个是单目运算符,一个是三目运算符。
    4. C语言中有且只有一个三目运算符。
    5. 逗号运算符的优先级最低,要记住。
    6. 此外要记住,对于优先级:算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符。逻辑运算符中“逻辑非 !”除外。

    一些容易出错的优先级问题

    上表中,优先级同为1 的几种运算符如果同时出现,那怎么确定表达式的优先级呢?这是很多初学者迷糊的地方。下表就整理了这些容易出错的情况:

    优先级问题表达式经常误认为的结果实际结果
    . 的优先级高于 *(-> 操作符用于消除这个问题) *p.f p 所指对象的字段 f,等价于:
    (*p).f
    对 p 取 f 偏移,作为指针,然后进行解除引用操作,等价于:
    *(p.f)
    [] 高于 * int *ap[] ap 是个指向 int 数组的指针,等价于:
    int (*ap)[]
    ap 是个元素为 int 指针的数组,等价于:
    int *(ap [])
    函数 () 高于 * int *fp() fp 是个函数指针,所指函数返回 int,等价于:
    int (*fp)()
    fp 是个函数,返回 int*,等价于:
    int* ( fp() )
    == 和 != 高于位操作 (val & mask != 0) (val &mask) != 0 val & (mask != 0)
    == 和 != 高于赋值符 c = getchar() != EOF (c = getchar()) != EOF c = (getchar() != EOF)
    算术运算符高于位移 运算符 msb << 4 + lsb (msb << 4) + lsb msb << (4 + lsb)
    逗号运算符在所有运 算符中优先级最低 i = 1, 2 i = (1,2) (i = 1), 2

    这些容易出错的情况,希望读者好好在编译器上调试调试,这样印象会深一些。一定要多调试,光靠看代码,水平是很难提上来的。调试代码才是最长水平的。
     

     ================扩展表====================

    虽然ascii码表中都以十进制和二进制表示,但是编程语言中对于字符通常以二进制、十六进制(前两者二进制编辑器采用的最多)、八进制表示为主、十进制仅做辅助。 

    \ddd 1到3位八进制数所代表的任意字符 三位八进制,如\017、\101属于\ddd
    \xhh 1到2位十六进制所代表的任意字符 二位十六进制,\xab属于\xhh

    C里面IDE中对于可见字符通常以十进制和字符显示。对于不可见字符则以十进制和八进制显示。

     那\017为啥特殊呢,还要占用1个字节?

  • 相关阅读:
    Oracle NULL值
    关于微服务架构的权限控制初步设计
    .Net Core优化策略
    Winform如何不阻塞主进程UI的同时操作其他控件的输出
    数据结构与算法绪论学习 Day5_队列
    数据结构与算法绪论学习 Day4_栈
    数据结构与算法绪论学习 Day3_线性表
    数据结构与算法绪论学习 Day2 _算法效率的度量方法
    数据结构与算法绪论学习 Day1_基础概念
    数据结构与算法绪论学习 Day2 _线性表
  • 原文地址:https://www.cnblogs.com/zhjh256/p/15615486.html
Copyright © 2011-2022 走看看