Как правильно проверить, включено ли битовое поле в php


Как правильно проверить, включено ли битовое поле - (в php)?

Я хочу проверить битовое поле, которое поступает из бд (mysql), включено оно или нет.

Это правильный путь?

if($bit & 1)

Есть ли другие способы?

Я вижу, что кто-то кодирует, используя функцию ord(), это правильно?

Как if(ord($bit) == 1)

Author: Haim Evgi, 2010-08-18

5 answers

Это правильный способ проверки, согласно руководству по PHP.

Альтернативой может быть проверка в вашем запросе MySQL.

 0
Author: Jasper De Bruijn, 2010-08-18 11:52:39

Использовать

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

Где $n - это n-й бит для получения минус один (например, $n=0 для получения наименее значимого бита)

 6
Author: Frxstrem, 2017-11-09 19:35:53

Немного поздно, но может быть полезно для будущих посетителей этого вопроса. Я сделал себе небольшую функцию, которая возвращает все биты, активные в определенном флаге.

/**
 * 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
Author: Peter, 2015-02-19 09:51:11

Чтобы получить правильный бит, используйте следующий синтаксис:

$bit & (1 << $n)

Где $n - это получить (n+1)-й наименее значимый бит. Таким образом, $n=0 даст вам первый наименее значимый бит.

 1
Author: Gumbo, 2010-08-18 12:39:47

Я использую

if (($flag & 0b010) == 0b010) {
  // here we know that the second bit (dec 2) is set in $flag
}
 1
Author: santiago arizti, 2016-10-18 23:42:26