素材牛VIP会员
php位运算
 cx***de  分类:Python  人气:1124  回帖:2  发布于6年前 收藏

为什么会出现这样的情况呢 比如二进制 2 4 8
$a=2+4+8=14
if($a & 2) 会为真 $a&4 $a&8也是真
求大神透彻点讲解

 标签:pythonphp

讨论这个帖子(2)垃圾回帖将一律封号处理……

Lv4 码徒
阿***c 产品经理 6年前#1

14 的二进制是 1110
2 的二进制是 10,14 & 2 = 2 为真没毛病。
4 的二进制是 100,14 & 4 = 4 为真也没毛病。
8 的二进制是 1000,14 & 8 = 8 为真也没毛病。

Lv4 码徒
13***64 软件测试工程师 6年前#2

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)才有可能。

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取