为什么会出现这样的情况呢 比如二进制 2 4 8
$a=2+4+8=14
if($a & 2) 会为真 $a&4 $a&8也是真
求大神透彻点讲解
14的二进制:1110
2的二进制:0010
所以:
# $a & 2为
1 1 1 0
& 0 0 1 0
----------
0 0 1 0
&运算符,是按位取“与”,也就是,对应位上的两个二进制数,都为1时,才为1,其他情况,都为0。
上面只有第三位的地方,都为1,所以结果是0010。0010
表示的是十进制2。在PHP中,所有的非0值都表示真,0值表示假(大部分其他语言也有这个惯例,估计一开始是从C语言传来的,因为早期C语言没有布尔值,就使用0和非0数字来表示真假)
这样,$a & 4
和$a & 8
就好解释了:
# $a & 4为
1 1 1 0
& 0 1 0 0
----------
0 1 0 0
# $a & 8为
1 1 1 0
& 1 0 0 0
----------
1 0 0 0
这两个结果,一个是4,一个是8,所以都是非0,所以是真。
要想得到假值,用位与的话,只有$a & 0
或者$a & N
(N >= 16)才有可能。