检查位字段是否打开的正确方法是什么 - (在 php 中)?
我想检查来自 db(mysql) 的位字段是否打开。
这是正确的方法吗?
if($bit & 1)
还有其他方法吗?
我看到有人使用 ord() 函数编写代码,这是正确的吗?
喜欢
if(ord($bit) == 1)
使用
if( $bit & (1 << $n) ) {
// do something
}
其中
$n
是获得 减一 的第 n 位(例如,$n=0
获得最低有效位)
我用
if ($flag & 0b010) {
// here we know that the second bit (dec 2) is set in $flag
}
有点晚了,但可能对未来访问这个问题的人有用。我为自己制作了一个小函数,它返回某个标志中活动的所有位。
/**
* 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>";
要获取正确的位,请使用以下语法:
$bit & (1 << $n)
其中
$n
是获取第(n+1)个最低有效位。因此 $n=0
将为您提供第一个最低有效位。