• 【转】运算符优先级


    由于一直弄不清楚运算符的优先级,所以找了这么一篇文章过来学习


    本文仅适用于怎么也记不住运算符优先级顺序的人,已经记住了的就飘过吧 ~~ 

    估计很多初学 C 语言的人都会碰到这么一个问题: C 运算符太多太复杂,优先级顺序难记,背了还是忘。那怎么办呢? 

    在实际写程序的过程中倒还好,实在不知道哪个先哪个后,咱就给它加个括号,而且给程序中添加适当的括号也是非常推荐,值得表扬的,是一个很好的编程习惯。 

    可是问题又来了,考试(比如说期末考试、等级考试。。)的时候出卷老师可不跟你来这套,他就是不用括号,然后就看着你得意地笑:小样,猜个答案吧 …… 

    结果往往是以我们的失败而告终! 

    像我标题所说的,如何快速、准确、轻松地记住 C 语言的运算符优先级顺序呢?(下面的内容都出自《 C Traps and Pitfalls 》,不过我用简单点的语言给概括一下) 

    首先来张图 ,别晕,仔细看看还是层次分明的


    咱们就来解释一下这张图的内容,下面就单刀直入,不废话了 

    这是 C 语言中所有运算符优先级的表,左边一个大箭头一看就知道:从上到下,优先级依次降低; 

    然后看整体最粗的蓝色线,它将所有的运算符分为六个部分,最上面 4 个优先级最高,书上说它们其实不算严格意义上的运算符,记住就行了,应该没啥问题;接下来有点多了,不过他们有个通称就是  单目运算符  ;再接下来最多的那个,怎么记呢?  双目运算符  ;再接下来这一个你肯定猜到了:  三目运算符  ;紧随其后的就是赋值运算符了,注意这里包涵很多种的赋值运算符: =  op= ;逗号运算符优先级最低; 

    上面的弄懂了的话,对于运算符优先级的掌握就成功一大半了,其中要注意单目、三目和赋值运算符的结合性是自右向左的 

    然后就到了中间最大一块了,如何记住双目运算符之间的优先级呢?四个字:数移关逻。数学 > 移位 > 关系 > 逻辑,简单吧? 

    数学运算符,小学生都知道,先乘除(这里加个模)后加减; 
    移位就没啥说的了; 
    关系运算符中,大小判断优于等于判断; 
    逻辑运算符下面又有点小复杂 ,黄色的线将上下一分为二,按位逻辑 > 顺序逻辑;同时逻辑与 > 逻辑或;按位异或 ^ 居于与或之间。 

    所有的 C 语言运算符优先级和结合性都介绍完了,简单吧? 

    如果你以前没记住又看得比较快,估计到这里你还是没记住,没关系,无穷循环,记住了就 break  

    给个小例子 
    在使用指针的时候经常碰到诸如 *p++  (*p)++ 这样的东东,现在是不是一眼就看明白了? *  ++ 都是单目运算符,优先级相同,自右向左 ……

  • 相关阅读:
    STL::next_permutation();
    P2626 斐波那契数列(升级版)
    P1029 最大公约数和最小公倍数问题
    P1075 质因数分解
    4.7生日当天测
    cin,scanf,gets,getline,cin.getline对于字符串的输入
    两个互质的数不能凑出来的数证明
    简单的全排列问题(给初学者)
    紫书 例题 10-22 UVa 1640(数位统计)
    紫书 例题 10-21 UVa 11971(连续概率)
  • 原文地址:https://www.cnblogs.com/7ants/p/3261695.html
Copyright © 2020-2023  润新知