PHP 逻辑运算符与位运算符
做到好多道这样的题……基本上没有考虑对过。
- 下面程序中$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,1
和4,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
植入部分
如果您觉得文章不错,可以通过赞助支持我。
如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。