CodeSky 代码之空

随手记录自己的学习过程

PHP 逻辑运算符与位运算符

2014-01-24 12:03分类: PHP评论: 0

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

  1. 下面程序中$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,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

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

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)