zoukankan      html  css  js  c++  java
  • 三目运算符的优先级问题

    被群里的一道题给逗乐了,一群人在下面讨论的不可开交,最后总结了一下,纪念纪念,补点基础知识……

    //原题:求3<8?(9<6?7:5):2>0?4:1的值
    //在程序里面运行得到5,那是怎么得到的呢?这才是我们探讨的问题的所在,看演示
    int n1 = 3<8?(9<6?7:5):2>0?4:1; //5
    int n2 = 3<8?(9>6?7:5):2>0?4:1; //7
    int n3 = 3<8?5:2>0?4:1; //5
    int n4 = 3>8?5:2>0?4:1; //4
    int n5 = 3<8?5:4; //5
    int n6 = 3>8?5:4; //4

    int n7 = 3>8?5:2>0?4:1; //4
    int n8 = 3>8?5:2<0?4:1; //1
    //综上输出结果,说明是先算的2>0?4:1得到4,然后再算3>8?5:4得到4.不过这是我根据程序结果推断的

    那么,对于三目运算符的计算规则到底是怎么样的呢?其实是这样的,这个事要先确定优先级

    //步骤:

    //求3<8?(9<6?7:5):2>0?4:1
    //括号的优先级是最高的,所以先算括号里的(9<6?7:5)得到5,
    //然后算式变成 3<8?5:2>0?4:1;
    //?:条件运算符,三目运算是从右往左分组计算的,所以先计算2>0?4:1,得到4;
    //然后算式变成3<8?5:4,这就很easy啦,直接得到结果5;

    明白步骤之后是不是感觉这没一点迷惑性啊,但是不明白计算的优先顺序,就算你能得到正确结果,也是有很大的水分在里面哟,我们要做的就是要透过现象看到本质,一步一步清晰知道结果是这样出来滴!

    补充一张图:


    OSFF szy

  • 相关阅读:
    27:单词翻转
    c++自制锁机程序--两行代码
    19:字符串移位包含问题
    18:验证子串
    23:二维数组回形遍历
    Java获取程序或项目路径的常用方法
    java 、Android 提交参数转码问题
    java 上传图片 打水印
    使用getGenericSuperclass()和getActualTypeArguments()将DAO做成泛型
    zoj 1010 Area【线段相交问题】
  • 原文地址:https://www.cnblogs.com/rongyao/p/6515757.html
Copyright © 2011-2022 走看看