PHP 逻辑运算符与位运算符

做到好多道这样的题……基本上没有考虑对过。

  1. 下面程序中$b的输出结果是( A )。
<?php
    $a=3;
    $b=4;
    if($a||$b=5){
        echo 'todo';
    }
    echo $b;
?>

A. todo4 B.5 C.3 D.false

这题之所以选A,在于运算到$a时已经是True了,逻辑运算符不会去运算后面的$b=5所以$b并未改变其值。


<?php
    $a=0;
    $b=0;
    if($a=3 || $b=3){
        $a++;
        $b++;
    }
    echo $a ",".$b;
?>
<?php
    $a=0;
    $b=0;
    if($a=3 | $b=3){
        $a++;
        $b++;
    }
    echo $a.",".$b;
?>

以上两个的运算结果分别是1,14,4
为什么是这个结果:
第一,优先级问题,优先级并不是直接自左向右运算,||的优先级比=要高,所以优先的一边不是$a = 3 而是3|| $b=3
第二,位运算符的特性是全部都会运算,会把所有顺序都过一遍,自然也就经过了$a=3$b=3

关于优先级的延伸阅读:http://www.php.net/manual/zh/language.operators.precedence.php

位运算符的实质是二进制,换句话说,如:2 | 4 | 8 =运算应该是这样进行的

 010    <- 2
 100    <- 4
----
 110    <- 6

最终还是会转换为十进制数,这里还有另一道题:

16. 写出下面代码的结果(C   )。
    <?php
         echo 1>>0;
           echo 2>>1;
            echo 3<<2;
    ?>
A.012                 B.106                 C.1112                D.123

PHP手册中:
$a << $b Shift left(左移) 将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。
$a >> $b Shift right(右移) 将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。
这样就更好理解了。

关于位运算符的扩展阅读:http://www.php.net/manual/zh/language.operators.bitwise.php

植入部分

如果您觉得文章不错,可以通过赞助支持我。

如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。

标签: 知识, 语法, 题目

添加新评论