Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: не могу даже тему сформулировать )
 
 автор: ddhvvn   (18.05.2010 в 21:43)   письмо автору
 
 

В общем, совсем опух )
Как называется такая штука, когда какое-то свойство задается определенным числом, которое уникально и по которому можно узнать комбинацию параметров.
Блин! Вот допустим, грубо говоря
1 - красный
10 - круглый

если хранится 11 - значит красный круглый ))))
понял меня кто-нибудь? ))))
если да, то скажите как это называется на нормальном языке и самое главное, правило проектирования такой "штуки" )))

  Ответить  
 
 автор: elenaki   (18.05.2010 в 21:47)   письмо автору
 
   для: ddhvvn   (18.05.2010 в 21:43)
 

CHMOD?

  Ответить  
 
 автор: ddhvvn   (18.05.2010 в 21:51)   письмо автору
 
   для: elenaki   (18.05.2010 в 21:47)
 

блин, ну типа того что ли %)

  Ответить  
 
 автор: root   (18.05.2010 в 22:26)   письмо автору
 
   для: ddhvvn   (18.05.2010 в 21:51)
 

битовая маска?

  Ответить  
 
 автор: ddhvvn   (18.05.2010 в 22:35)   письмо автору
 
   для: root   (18.05.2010 в 22:26)
 

вроде похоже на битовое поле...
только если это оно, я сейчас выяснил что это ощутимо сказывается на производительности.. хм..

  Ответить  
 
 автор: sim5   (19.05.2010 в 06:36)   письмо автору
 
   для: ddhvvn   (18.05.2010 в 21:43)
 

Такое возможно только при позиционном кодировании, иначе 11, это не обязательно может быть красным и круглым. В данном случае у вас каждая позиция (вес) должна описывать характеристику, тогда установленные биты позиций будут определять текущий набор характеристик.

  Ответить  
 
 автор: ddhvvn   (19.05.2010 в 15:05)   письмо автору
 
   для: sim5   (19.05.2010 в 06:36)
 

ну значит, это как раз битовая маска/битовое поле..

  Ответить  
 
 автор: sim5   (19.05.2010 в 15:16)   письмо автору
 
   для: ddhvvn   (19.05.2010 в 15:05)
 

Ну маска, это понятие несколько иное, а вот последовательный битовый набор, это как раз.

  Ответить  
 
 автор: ddhvvn   (19.05.2010 в 15:35)   письмо автору
 
   для: sim5   (19.05.2010 в 15:16)
 

что-то тогда не знаю даже пользоваться ли этим... или сделать лучше какую нить тупо строку, где будут храниться нужные параметры.
хм... а ведь тогда это и будет "псевдомножество" )))
блин, вообще за..мусорил себе мозг )))

  Ответить  
 
 автор: sim5   (19.05.2010 в 15:44)   письмо автору
 
   для: ddhvvn   (19.05.2010 в 15:35)
 

У вас есть набор:
1 - красный
10 - круглый
Это параллельный код, и "красный круглый" в таком наборе под кодом 11, может быть только новым самостоятельным значением, никоим образом никак сумма значений кода 1 и 10.

Если пользоваться параллельным кодом, и если вас правильно поняли, тогда при таком подходе ваш код будет страдать избыточностью. А вот последовательный битовый набор, как раз и даст необходимое. Например:
<?
//это характеристики описывающие битовые значения набора
$arr = array(' red'' circle'' easy'' green'' square'' average'' blue'' rhombus'' heavy');
//набор хранящий состояния
$n 231;
//его битовое значение
echo decbin($n).'<br>';
//если весовое значение набора равно 1 (бит установлен), 
//то получаем его характеристику 
for($s=''$i=0$i<strlen(decbin($n)); $i++) if($n pow(2,$i)) $s .= $arr[$i];
echo 
$s;

Маска же, это если вас из текущего набора ($n) на данный момент интересует состояние, например, двух младших разрядов, тогда по маске 3, вы можете их выделить. В этом суть маски.

  Ответить  
 
 автор: Trianon   (19.05.2010 в 20:54)   письмо автору
 
   для: ddhvvn   (19.05.2010 в 15:05)
 

Битовая маска и битовое поле - естествеенная реализация множества / набора.

  Ответить  
 
 автор: ddhvvn   (19.05.2010 в 22:25)   письмо автору
 
   для: Trianon   (19.05.2010 в 20:54)
 

пардон...
спасибо за просвещение ))

  Ответить  
 
 автор: Trianon   (19.05.2010 в 22:40)   письмо автору
 
   для: ddhvvn   (19.05.2010 в 22:25)
 

между прочим, второе, завчем применяются битовые маски - для доступа к упакованным полям сложных структур данных.
Может у Вас этот случай?

  Ответить  
 
 автор: Тень*   (19.05.2010 в 22:42)   письмо автору
 
   для: Trianon   (19.05.2010 в 22:40)
 

> для доступа к упакованным полям сложных структур данных

В смысле?

  Ответить  
 
 автор: ddhvvn   (19.05.2010 в 22:51)   письмо автору
 
   для: Trianon   (19.05.2010 в 22:40)
 

да у меня вроде совсем не сложные структуры )

  Ответить  
 
 автор: Trianon   (19.05.2010 в 11:53)   письмо автору
 
   для: ddhvvn   (18.05.2010 в 21:43)
 

это называется набор или множество. Вернее - естественная реализация набора/множества цепочкой бит.

В паскалеподобных языках соответствующий тип называется SET OF ...

  Ответить  
 
 автор: ddhvvn   (19.05.2010 в 15:05)   письмо автору
 
   для: Trianon   (19.05.2010 в 11:53)
 

ненене, это точно не множество ))
Вы неправильно меня поняли

  Ответить  
 
 автор: Саня   (19.05.2010 в 16:07)   письмо автору
 
   для: ddhvvn   (18.05.2010 в 21:43)
 

Есть такой вариант:
<?
$color 
= array(
  
=> 'красный',
  
=> 'синий',
  
=> 'зелёный',
  
=> 'жёлтый',
  
=> 'фиолетовый',
);

$form = array(
  
10 => 'круглый',
  
20 => 'квадратный',
  
30 => 'треугольный',
  
40 => 'сферический',
  
50 => 'трапецивидный',
);

$pos = array(
  
100 => 'сверху',
  
200 => 'снизу',
  
300 => 'слева',
  
400 => 'справа',
);

$code 123;

if ( 
$code ) {
  
$i $code 10;
  if ( isset(
$color[$i]) )
    print 
$color[$i].'<br>'
}

if ( 
$code >= 10 ) {
  
$i floor($code 100 10) * 10;
  if ( isset(
$form[$i]) )
    print 
$form[$i].'<br>'
}

if ( 
$code >= 100 ) {
  
$i floor($code 1000 100) * 100;
  if ( isset(
$pos[$i]) )
    print 
$pos[$i].'<br>'
}

Если использовать тип int на 32-битной системе, то спокойно можно закодировать 387420489 вариантов (9 разных параметров по 9 вариантов каждого параметра).

Этот код запросто можно свернуть в цикл.

Преимущество перед битовым набором очевидно — такое количество вариантов в битовое поле не впихнешь.
Недостаток тоже очевиден — всего 9 параметров по 9 вариантов.

  Ответить  
 
 автор: sim5   (19.05.2010 в 16:19)   письмо автору
 
   для: Саня   (19.05.2010 в 16:07)
 

Можно из трех значений, например, красный, синий, зелёный, формировать динамически всевозможные комбинации как массив, это упростит немного код. Правда, если такое удовлетворяет, и еменно это и нужно. Любую битовую комбинацию можно представить в виде строки.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования