Вот немного более универсальная функция для извлечения также битовых диапазонов.
function extract_bits($value, $start_pos, $end_pos)
{
$mask = (1 << ($end_pos - $start_pos)) - 1;
return ($value >> $start_pos) & $mask;
}
например, чтобы извлечь значение второго бита из 13, это будет:
extract_bits(13,1,2);