Каков правильный способ проверить, включено ли поле бит – (в php)?
Я хочу проверить бит поле, которое приходит из db (mysql), если оно включено или нет.
это правильный путь?
if($bit & 1)
Есть ли другие способы?
Я вижу код, который использует функцию ord () , это правильно?
например if(ord($bit) == 1)
Это правильный способ проверить, согласно руководству PHP .
Альтернативой может быть проверка вашего MySQL-запроса.
использование
if( $bit & (1 << $n) ) { // do something }
Где $n
– n-й бит, чтобы получить минус один (например, $n=0
для получения младшего значащего бита)
Это немного поздно, но может быть полезно для будущих посетителей на этот вопрос. Я сделал себе небольшую функцию, которая возвращает все биты, которые активны в определенном флаге.
/** * 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
даст вам первый младший бит.
я использую
if (($flag & 0b010) == 0b010) { // here we know that the second bit (dec 2) is set in $flag }