|
|
|
| В общем, совсем опух )
Как называется такая штука, когда какое-то свойство задается определенным числом, которое уникально и по которому можно узнать комбинацию параметров.
Блин! Вот допустим, грубо говоря
1 - красный
10 - круглый
если хранится 11 - значит красный круглый ))))
понял меня кто-нибудь? ))))
если да, то скажите как это называется на нормальном языке и самое главное, правило проектирования такой "штуки" ))) | |
|
|
|
|
|
|
|
для: ddhvvn
(18.05.2010 в 21:43)
| | CHMOD? | |
|
|
|
|
|
|
|
для: elenaki
(18.05.2010 в 21:47)
| | блин, ну типа того что ли %) | |
|
|
|
|
|
|
|
для: ddhvvn
(18.05.2010 в 21:51)
| | битовая маска? | |
|
|
|
|
|
|
|
для: root
(18.05.2010 в 22:26)
| | вроде похоже на битовое поле...
только если это оно, я сейчас выяснил что это ощутимо сказывается на производительности.. хм.. | |
|
|
|
|
|
|
|
для: ddhvvn
(18.05.2010 в 21:43)
| | Такое возможно только при позиционном кодировании, иначе 11, это не обязательно может быть красным и круглым. В данном случае у вас каждая позиция (вес) должна описывать характеристику, тогда установленные биты позиций будут определять текущий набор характеристик. | |
|
|
|
|
|
|
|
для: sim5
(19.05.2010 в 06:36)
| | ну значит, это как раз битовая маска/битовое поле.. | |
|
|
|
|
|
|
|
для: ddhvvn
(19.05.2010 в 15:05)
| | Ну маска, это понятие несколько иное, а вот последовательный битовый набор, это как раз. | |
|
|
|
|
|
|
|
для: sim5
(19.05.2010 в 15:16)
| | что-то тогда не знаю даже пользоваться ли этим... или сделать лучше какую нить тупо строку, где будут храниться нужные параметры.
хм... а ведь тогда это и будет "псевдомножество" )))
блин, вообще за..мусорил себе мозг ))) | |
|
|
|
|
|
|
|
для: 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, вы можете их выделить. В этом суть маски. | |
|
|
|
|
|
|
|
для: ddhvvn
(19.05.2010 в 15:05)
| | Битовая маска и битовое поле - естествеенная реализация множества / набора. | |
|
|
|
|
|
|
|
для: Trianon
(19.05.2010 в 20:54)
| | пардон...
спасибо за просвещение )) | |
|
|
|
|
|
|
|
для: ddhvvn
(19.05.2010 в 22:25)
| | между прочим, второе, завчем применяются битовые маски - для доступа к упакованным полям сложных структур данных.
Может у Вас этот случай? | |
|
|
|
|
|
|
|
для: Trianon
(19.05.2010 в 22:40)
| | > для доступа к упакованным полям сложных структур данных
В смысле? | |
|
|
|
|
|
|
|
для: Trianon
(19.05.2010 в 22:40)
| | да у меня вроде совсем не сложные структуры ) | |
|
|
|
|
|
|
|
для: ddhvvn
(18.05.2010 в 21:43)
| | это называется набор или множество. Вернее - естественная реализация набора/множества цепочкой бит.
В паскалеподобных языках соответствующий тип называется SET OF ... | |
|
|
|
|
|
|
|
для: Trianon
(19.05.2010 в 11:53)
| | ненене, это точно не множество ))
Вы неправильно меня поняли | |
|
|
|
|
|
|
|
для: ddhvvn
(18.05.2010 в 21:43)
| | Есть такой вариант:
<?
$color = array(
1 => 'красный',
2 => 'синий',
3 => 'зелёный',
4 => 'жёлтый',
5 => 'фиолетовый',
);
$form = array(
10 => 'круглый',
20 => 'квадратный',
30 => 'треугольный',
40 => 'сферический',
50 => 'трапецивидный',
);
$pos = array(
100 => 'сверху',
200 => 'снизу',
300 => 'слева',
400 => 'справа',
);
$code = 123;
if ( $code > 1 ) {
$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 вариантов. | |
|
|
|
|
|
|
|
для: Саня
(19.05.2010 в 16:07)
| | Можно из трех значений, например, красный, синий, зелёный, формировать динамически всевозможные комбинации как массив, это упростит немного код. Правда, если такое удовлетворяет, и еменно это и нужно. Любую битовую комбинацию можно представить в виде строки. | |
|
|
|