帮助理解这一行PHP正在做什么

时间:2009-12-09 15:52:28

标签: php

变量值列在下面

$v['flag'] = 10
kPOSTAGE_HOME = 8

那么下面这行怎么办?!

if(($v['flag']&kPOSTAGE_HOME)==kPOSTAGE_HOME) {
    //do something
}

5 个答案:

答案 0 :(得分:7)

&安培;设置两个值上设置的位。一些二进制数学:

  00001010 | 10
& 00001000 |  8
---------------
= 00001000 |  8

所以10&8返回8,而8 == 8。原因是检查该位掩码中的标志是否已设置...

答案 1 :(得分:4)

它检查$v['flag']中的位模式是否设置了第3位。

答案 2 :(得分:2)

而且,为了更好的可读性,它可以简化为以下内容:

if ( $v['flag'] & kPOSTAGE_HOME ) {

答案 3 :(得分:1)

它掩盖了变量中的'8'位。基数10中的数字'10'=二进制的= 1001,8 == 1000.这意味着“1001是否设置了1000”位?“答案是'是'。

答案 4 :(得分:0)

它会在$v['flag']中的第三位开启时进行检查。 &是“按位和”运算符,二进制8是"00000100",因此你将“按位”和“除第三个之外的所有位”将为零,所以如果第三位打开它将仍然存在,因此你需要进一步检查是否平等。