Битовая маска

WorldsSpawn

Создатель
Регистрация
30 Мар 2009
Сообщения
19
Реакции
13
Здравствуйте, подскажите как правильно использовать битовые маски.

Нужно динамически генерировать маску..
Например
PHP:
$res = 100; // Случайное число..
$i = -1;
while ( $i++<17 )
{
    $q = 1 << $i;
    if ( $res & $q ) echo '<b>'.$q.'</b><br />';
    else echo $q.'<br />';
}
Маска соответствует 4, 32, и 64
А мне нужно все сразу, или только соответствие 1-ке.
Пробывал так
PHP:
function mask($arr)
{
	$r = 0;
	foreach ($arr as $ar)
	{
		$p = 1 << $ar;
		$r |= $p;
	}
	return $r;
}
Результат неудовлетворителен(

Читал, но что-то не то




Такая система если не ошибаюсь используется в vBulletin)

Подскажите, куда капать :)
 
Вот это наглядный пример для единички:
PHP:
<?php
$res = 100; // Случайное число..
$i = -1;
while($i++ < 17){
	$q = 1 << $i;
	$tmp = $res | $q;
	print('$res | $q = '.$tmp.'<br />');
	if($tmp == 101){
		print('<font color="red">'.$q.'</font><br />');
	}
	else{
		print('<font color="blue">'.$q.'</font><br />');
	}
}
?>

ну а для всех значений соответственно будет так:
PHP:
<?php
$res = 100;
$i = -1;
while($i++ < 17){
	$q = 1 << $i;
	if($res | $q){
		print('<font color="red">'.$q.'</font><br />');
	}
	else{
		print('<font color="blue">'.$q.'</font><br />');
	}
}
?>
 
Я уже разобрался, спасибо)
PHP:
function mascka($ar)
{
	$r = 0;
	foreach ( $ar as $t) $r |= 1 ^ $t;
	return $r;
}
 
Назад
Сверху