zoukankan      html  css  js  c++  java
  • PHP三维优先级运算

    昨天去某大型公司面试,做了一套面试题,整套面试题的基础要求比较高,对于js的使用有一定的要求。在本次面试中碰到PHP三维运算优先级的问题,先看题:

    <?php
    $b=20;
    $c=40;
    $a=$b>$c?($c-$b)?1:($b-$c)>0:($b+$c)?0:$b*$c;
    echo $a;
    ?>

    此题要求的三维运算和优先级的结合使用,当时做对了,但是不明白原理。回去以后请教了大神才明白怎么回事,看解题思路:

    /*
    关于运算优先级,先看文档:http://www.php.net/manual/zh/language.operators.precedence.php
    ?:是左结合,就是从左向右
    */
     
    //先看个简单的:
    //1.想知道??:它是怎样解析的
    //$a=true?false?1:0;//报错,语法错误
     
    //2.再试一下这个:
    $a=true?false?1:0:2;
    echo $a;//0
     
    /*
    通过观察以上两个判断,我猜测应该是这样的:
    当出现?时,它会在它后面寻找:,如果一直没有找到,则会报错
    如果在后面的:前面出现了?,则会先让后面的?与:结合
    也就是说true?false? 这种表达,它是不去解析的
    true?false?true:false 这种表面,它会选择解析后面的一对?:然后得到结果:false
    语句就变成true?false 了,这样语句就不完整了,所以会报错
     
    下面我们想看楼主的问题:
    $b=20;
    $c=40;
    $a=$b>$c?($c-$b)?1:($b-$c)>0:($b+$c)?0:$b*$c;
    解析的顺序就应该是这样的:
    $a=true? (20?1:-20)>0 : 60 ?0:800;
    $a=true?1>0:60?0:800;
    $a=true?true:60?0:800;
    $a=true?0:800;
    $a=0;
     
    */
     <?php
    $b=20;
    $c=40;
    $a=$b>$c? ($c-$b)?1:($b-$c)>0:($b+$c)?0:$b*$c;
    //     $b>$c?1:($b+$c)?0:$b*$c
    //    $b>$c?1:0
    //    0
    echo $a;
  • 相关阅读:
    Sudoku POJ 2676 [dfs]
    a>b和(*a).b
    lowbit()操作
    Anniversary party HDU 1520树形dp
    Lifting the Stone HDU 1115 求多边形的重心
    Boolean Expressions POJ 2106 【递归】
    Shaolin HDU 4585 STL map||Treap树
    取石子游戏 HDU 1527 威佐夫游戏
    A Simple Problem with Integers POJ 3468 区间修改线段树lazy—tag大法
    社会性网络软件SNS 帮助你认识比尔盖茨 java程序员
  • 原文地址:https://www.cnblogs.com/yangzailu/p/6631385.html
Copyright © 2011-2022 走看看