Множество от интервального типа

Множество, базовым типом которого есть интервальный тип,

хранится также, как множество, базовым типом которого является

тип 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