码迷,mamicode.com
首页 > 其他好文 > 详细

关于&&,||和=的优先级问题

时间:2014-10-21 13:39:24      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:div   问题   代码   amp   php   简单   c   不能   没有   

下面代码输出什么?
<?php
        $a = 3;
        $b = 5;
        if($a = 5 || $b = 7){
                $a++;
                $b++;
        }
        echo $a.$b;
?>
A. 16
B. 68
C. 35
D. 以上都不对

怎么说呢,这是一道比较坑的题目,应该用等于,用了赋值,这个是很容易就会被发现,然后至少我是直接去下步运算,先++,再输出,结果为68.
问题当然不能这么简单了,这个答案是错的,正确的答案是A,16.||的优先级要高于=,所以先判断5||,此时就会返回真并且赋值给$a,再去++,当然这里还有个陷阱,那就是对true的自增的问题,想当然的认为应该将true换成1,然后自增,当然这是不对的.
这道题到这里也就结束了,但是我还有个问题就是,如果代码修改如下:
<?php
        $a = 3;
        $b = 5;
        if($a = 0 || $b = 7){
                $a++;
                $b++;
        }
        echo $a.$b;
?>
那么,当0||判断为假,即去判断右边的语句,这时候$b的值是为5的,然后后面还有个赋值运算,按照||的优先级高于赋值运算,那应该会直接判断$b的值是不是为真,但是实际的运算是先进行赋值,然后再进行||的判断,这个我就不是很理解了,有没有大神可以给解释解释?

关于&&,||和=的优先级问题

标签:div   问题   代码   amp   php   简单   c   不能   没有   

原文地址:http://www.cnblogs.com/oniceriver/p/4040043.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!