检查位字段是否在php中打开的正确方法是什么

时间:2010-08-18 11:49:14

标签: php bit-manipulation

检查位字段是否打开的正确方法是什么 - (在php中)?

如果打开或不打开,我想检查来自db(mysql)的位字段。

这是正确的方法吗?

if($bit & 1)

还有其他方法吗?

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

喜欢if(ord($bit) == 1)

5 个答案:

答案 0 :(得分:7)

使用

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

其中$n n -th位以获取减去一个(例如,$n=0以获得最低有效位<) / p>

答案 1 :(得分:3)

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

/**
 * 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>";

答案 2 :(得分:1)

是的,根据the PHP manualif($bit & 1)是检查的正确方法。

另一种方法是检查MySQL查询。

答案 3 :(得分:1)

要获取正确的位,请使用以下语法:

$bit & (1 << $n)

$n要获得( n +1) - 最低有效位。因此$n=0将为您提供第一个最重要的位。

答案 4 :(得分:1)

我用

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