Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Вниз

Как преобразовать множество к целому типу и обратно? 


kserg@ukr.net   (2002-04-09 13:12) [0]

спасибо



Alx2   (2002-04-09 13:21) [1]

На каждый элемент множества приходится один бит. Максимальный размер мн-ва = 256 бит = 256 / 8 = 32 байта. Такого стандартного целочисленного типа нет. Максимум что можно преобразовать к целому типу - это множество из 64 элементов (приводится к типу Int64). Делается так:
type
TMy64set = set of 0..63;
Var ss : TMy64Set;
i64 : int64;
begin
i64 := int64(ss); // привели к целому типу
ss := TMy64Set(i64); // обратно, во- множество
end;



-=CrazyFish=-   (2002-04-09 13:38) [2]

а еще можно определить переменную i64 как
var i64: int64 absolute ss;

тогда читаем ss как множество, и в то же время i64 как целое



kserg@ukr.net   (2002-04-09 13:44) [3]

to Alx2
Пример работает только в том случае, если число элементов множества В ТОЧНОСТИ совпадает с разрядностью целого типа, т.е.:
set of 0..63 - только для int64
set of 0..31 - только для integer и т.п.

Но такие множества на редкость неудобны, гораздо удобнее иметь нечто вроде:
set of (fsBold, fsItalic, fsUnderline)
и присвоить его переменную стандартному integer.

P.S. решение найдено немного подпольным путём, а как же законно сделать?



Alx2   (2002-04-09 13:57) [4]

>kserg@ukr.net (09.04.02 13:44)
>если число элементов множества В ТОЧНОСТИ совпадает
>с разрядностью целого типа,
Это я и имел в виду.

А вот - независимо от размера, но если множество по размеру больше, чем 4 байта - кое-что из него потеряем :)
type
TMySet = set of 0..3;
Var ss : TMySet;
i : integer;
Begin
ss := [1];
i := Integer((@ss)^); // i - хранить мусор и все, что относится к ss.
ss := []; // Изменим ss
............... // xnj-nj cltkfkb
ss := TMySet((@i)^); // И снова Ss = [1]
End;




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.72 MB
Время: 0.026 c
3-69675           IronHawk              2002-03-28 13:34  2002.04.22  
Приветствую Мастеров ! Всевозможные операции в базе !


1-69882           koks                  2002-04-05 15:26  2002.04.22  
Подскажите, где можно найти хорошие коллекции битмапов...


1-69763           Bodia                 2002-04-06 05:52  2002.04.22  
Как сделать такую весчь?


1-69785           lipskiy               2002-04-08 01:12  2002.04.22  
Можно ли при описании константы использовать функции?


7-70034           Андрей Татуков        2002-01-25 17:05  2002.04.22  
как определить МОДЕЛЬ МОНИТОРА?