Множество, базовым типом которого есть интервальный тип,
хранится также, как множество, базовым типом которого является
тип byte. Однако, в памяти занимает место, которое зависит от ко-
личества элементов, входящих в объявленный интервал.
Например,
type S=10..17;
var I:set of S;
Это не значит, что первый элемент будет начинаться с 10-того
или 0-ого бита, как может показаться на первый взгляд. Как видно
из формулы вычисления смещения внутри байта 10 mod 8 = 2, смеще-
ние первого элемента множества I начнётся со второго бита. И, хо-
тя множество этого интервала свободно могло поместиться в один
байт, оно займёт (17 div 8)-(10 div 8)+1 = 2 байта.
В памяти это множество имеет представление как на рис. 3.9.
┌────┬────┬────┬────┬────┬────┬────┬────┐
@S+0 │15 │14 │13 │12 │11 │10 │ 0 │ 0 │
├────┼────┼────┼────┼────┼────┼────┼────┤
@S+1 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │17 │16 │
└────┴────┴────┴────┴────┴────┴────┴────┘
7 0
Рис. 3.9. Представление переменной типа set of S
Для конструирования множеств интервальный тип самый эконо-
мичный, т.к. занимает память в зависимости от заданных границ.
Например, Type S = 510..520;
Var I : S;
begin I:=[512]; end.
Представление в памяти переменной I будет:
@i+0 - 00000000 @i+1 - 00000001