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

Тема в разделе "PHP", создана пользователем WorldsSpawn, 19 янв 2011.

Модераторы: latteo
  1. WorldsSpawn

    WorldsSpawn Создатель

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

    Нужно динамически генерировать маску..
    Например
    PHP:
    $res 100// Случайное число..
    $i = -1;
    while ( 
    $i++<17 )
    {
        
    $q << $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 << $ar;
            
    $r |= $p;
        }
        return 
    $r;
    }
    Результат неудовлетворителен(

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

    http://habrahabr.ru/blogs/webdev/38015/
    http://habrahabr.ru/blogs/personal/37131/


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

    Подскажите, куда капать :)
     
  2. steel_HILL

    steel_HILL Постоялец

    Регистр.:
    15 апр 2010
    Сообщения:
    53
    Симпатии:
    14
    Вот это наглядный пример для единички:
    PHP:
    <?php
    $res 
    100// Случайное число..
    $i = -1;
    while(
    $i++ < 17){
        
    $q << $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 << $i;
        if(
    $res $q){
            print(
    '<font color="red">'.$q.'</font><br />');
        }
        else{
            print(
    '<font color="blue">'.$q.'</font><br />');
        }
    }
    ?>
     
  3. WorldsSpawn

    WorldsSpawn Создатель

    Регистр.:
    30 мар 2009
    Сообщения:
    15
    Симпатии:
    12
    Я уже разобрался, спасибо)
    PHP:
    function mascka($ar)
    {
        
    $r 0;
        foreach ( 
    $ar as $t$r |= $t;
        return 
    $r;
    }