PHP 逻辑运算符与位运算符
做到好多道这样的题……基本上没有考虑对过。
- 下面程序中$b的输出结果是( A )。
1<?php
2 $a=3;
3 $b=4;
4 if($a||$b=5){
5 echo 'todo';
6 }
7 echo $b;
8?>
9
A. todo4 B.5 C.3 D.false
这题之所以选A,在于运算到$a
时已经是True
了,逻辑运算符不会去运算后面的$b=5
所以$b
并未改变其值。
1<?php
2 $a=0;
3 $b=0;
4 if($a=3 || $b=3){
5 $a++;
6 $b++;
7 }
8 echo $a ",".$b;
9?>
10
1<?php
2 $a=0;
3 $b=0;
4 if($a=3 | $b=3){
5 $a++;
6 $b++;
7 }
8 echo $a.",".$b;
9?>
10
以上两个的运算结果分别是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
最终还是会转换为十进制数,这里还有另一道题:
116. 写出下面代码的结果(C )。
2 <?php
3 echo 1>>0;
4 echo 2>>1;
5 echo 3<<2;
6 ?>
7A.012 B.106 C.1112 D.123
8
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
评论 (0)