2010-08-18 38 views
2

什么是正确的方法来检查位域是否打开 - (在PHP中)?什么是正确的方法来检查,如果位域开启php

我想检查来自db(mysql)的位域是否打开或不打开。

这是正确的方法吗?

if($bit & 1) 

还有其他方法吗?

我看到有人使用ord()函数的代码,它是正确的吗?

if(ord($bit) == 1)

+0

ORD()返回这听起来像一个做事的方式hackisk字符串的ASCII值。 – Chris 2010-08-18 11:59:07

回答

1

这是按正确的方式,根据the PHP manual

另一种方法是在你的MySQL查询中进行检查。

+1

“这是”。什么是? – Petah 2017-10-26 06:48:47

1

为了得到正确的位,使用此语法:

$bit & (1 << $n) 

哪里$n是让(ñ +1)至少显著位。所以$n=0会让你成为第一个最不重要的位。

+0

在我的情况是? $ bit&(1 << 1)? (在db设置为1) – 2010-08-18 12:20:25

+0

我看到在我的情况下是$ bit&(1 << 0) – 2010-08-18 12:22:43

+0

@Haim Evgi:哦,是的,当然,它是基于零的。 – Gumbo 2010-08-18 12:24:48

6

使用

if($bit & (1 << $n)) { 
    // do something 
} 

哪里$nñ位至第拿到减一(例如,$n=0得到至少显著位)

2

这是一个有点晚,但可能对未来这个问题的访问者有用。我做了一个小函数,它返回在某个标志中有效的所有位。

/** 
* Shows all active bits 
* 
* @param int $flag 
* @return array 
*/ 
function bits($flag) 
{ 
    $setBits = array(); 
    for ($i = 1; $i <= 32; $i++) { 
     if ($flag & (1 << $i)) { 
      $setBits[] = (1 << $i); 
     } 
    } 

    // Sort array to order the bits 
    sort($setBits); 

    return $setBits; 
} 

echo "<pre>"; 
var_dump(bits(63)); 
echo "</pre>"; 
0

我用

if (($flag & 0b010) == 0b010) { 
    // here we know that the second bit (dec 2) is set in $flag 
} 
相关问题