![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Организация множества
CMOS © (2007-07-21 08:59:00)Не могу понять как организовано множество. Весит оно всего лишь 32 байта (выведите его в файл), а содержит 256 элементов. Ни в каком другом языке подобного нет. Но множество работает только с числами от 0 до 255. А для слов приходится использовать массив и проверять вхождение числа поэлементно, что существенно дольше.
Нашел кое-что по своему вопросу:
var a: Array[0..124] of Byte;
x: Word;
begin
x:= 1000;
a[x shr 3]:=a[x shr 3] or (1 shl (x and 7));
if (a[x shr 3] and (1 shl (x and 7)))<>0 then Write('Yes') else Write('No');
Readln;
end.
Там ничего не объяснялось. Просто говорилось, что для числа 1000 нужен массив на 125 элементов.
Интересно, но это работает и с массивом на 100 и на 32. С числами 1000 и 10000.
Помогите разобраться в этом коде.
CMOS (2007-07-24 07:16:00) [1]Все ясно, всем спасибо
Юрий Зотов (2007-07-21 14:16:00) [2]> CMOS © (21.07.07 08:59)
32 байта - это 256 бит. Они пронумерованы от 0 (младший) до 255 (старший). Элементы множества упорядочены (т.е., тоже пронумерованы), поэтому каждому элементу множества соответствует свой бит. Если этот бит равен 1, то соответствующий ему элемент ВХОДИТ во множество, если нулю - НЕ входит. Вот и вся кухня.
PS
Именно по этой причине:
а). множество может быть составлено ТОЛЬКО из элементов, поддающихся упорядочиванию (то есть, принадлежащих семейству Ordinal types);
б). количество элементов во множестве (мощность множества) не может превышать 256 (поскольку максимальный размер множества - 32 байта);
в). если численное значение элемента множества задается явно, то оно должно лежать в диапазоне от 0 до 255 и не может повторяться в других элементах множества.
Anatoly Podgoretsky (2007-07-21 11:44:00) [3]Класс TBits
Virgo_Style (2007-07-21 09:05:00) [4]CMOS © (21.07.07 8:59)
Весит оно всего лишь 32 байта (выведите его в файл), а содержит 256 элементов.
32 * 8 = 256
Читать про байты и биты, и про операции с последними.