Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Использование типов данных "Перечисление" и "Множество" [D7, XP]


Страницы:   1 2 3

DQ ©   (2014-03-28 19:44:00) 

Пара вопросов.

Вот я объявил:
type ZEnum = (z_first, z_second, ..); ZSet = set of ZEnum;
Посмотрел SizeOf(ZSet)- он показывает 1 байт. Можно ли заставить его выравнивать до 4-х байт? Временное решение: .. , z_last=31)

Вот я теперь пытаюсь (в Делфи7) проверить:
var ZS: ZSet;
..
ZS:=[z_second];
if (z_first in ZS) then showmessage('z_first');
if (z_second in ZS) then showmessage('z_second');

И при Ctrl+Space нет всплывающих окошек с подсказками какие ещё ZEnum бывают, можно как-то поправить чтоб были?


DQ   (2014-03-28 23:40:00) [41]

ам... Они все от нулевого "едут". И все должны возле каждого 4-го останавливаться. Критично чтоб они спустя час не стали останавливаться у "разных".


Германн   (2014-03-28 23:37:00) [42]

Удалено модератором


DVM   (2014-03-28 23:37:00) [43]


> DQ   (28.03.14 23:16) [13]


> Это я тоже говорил.

А, ну да, для секретных целей. Это все объясняет.


Inovet   (2014-03-28 23:30:00) [44]

> [13] DQ   (28.03.14 23:16)
> В моём понимании это одно и то же. В чём вы видите разницу?

Приплыли. Поезд выехал из пункта с номером столба 3 и делал остановки возле каждого следующего 4-го столба не одно и то же что - делал остановки возле каждого столба с номером кратным 4.


DQ   (2014-03-28 23:16:00) [45]

>> [10]

Вы чего ёрничаете? Причём тут "посчитаешь", считаю я не хуже вас. Надо 5 (например) элементов но чтоб 4 байта размер! К тому же в самом первом сообщении показал:
type ZEnum = (z_first, z_second, z_last=31);
И всё, пожалуйста! Три элемента, а размер ровно 4! Лишь "лишний" элемент мешается. Просто думал это как-то управляется явно.

>> [11]

В моём понимании это одно и то же. В чём вы видите разницу?

>> [12]

Это я тоже говорил.


DVM   (2014-03-28 22:45:00) [46]


> DQ   (28.03.14 21:37) [9]


> Мне не важно сколько максимум может достигнуть, надо чтоб
> в SizeOf() было 4 ровно.

Зачем?


Inovet   (2014-03-28 21:48:00) [47]

Так надо выравнивать на границу 4 байт или размер 4 байт?


это все...   (2014-03-28 21:43:00) [48]

в школу ходил?

длина_перечисления_должна_быть_не меньше := succ(pred(4) * 8);

24 члена в перечислимом типе = три байта на хранение хватит
нужно множество длиной четыре байта?
минимум 25 членов

сколько перечислимых членов может быть максимум чтобы множество осталось 4 байта - сам посчитаешь?


DQ   (2014-03-28 21:37:00) [49]

Сколько может быть и сколько реально есть - не одно и то же. Оно выравнивает до большего целого байта. Мне не важно сколько максимум может достигнуть, надо чтоб в SizeOf() было 4 ровно.

Кроме как "in" что ещё может работать с множествами?


это все...   (2014-03-28 21:22:00) [50]

ты доку то хоть открой.
посмотри сколько членов может быть во множестве
раздели это на восемь.
и получишь все подробности


DQ   (2014-03-28 21:16:00) [51]

Оно просто по плану в юнионе будет жить.

множество - это 32 байт

Насколько я понял множество подстраивает размер под ситуацию? Я сегодня делал множество про которое SizeOf() сказало 9 байт.

нарваться на контроль переполнения при обратном преобразовании в сет + приколы со старшим битом интегера, отвечающим за знак числа

ам... А не можно тут чуть подробнее?


это все...   (2014-03-28 20:44:00) [52]

Удалено модератором


это все...   (2014-03-28 20:39:00) [53]

Приводи его к Integer, в чем проблема?

наверное в том, что множество - это 32 байт в которых каждый бит отвечает за наличие члена причем важно в какой позиции этот бит


это все...   (2014-03-28 20:35:00) [54]

Удалено модератором


Ega23   (2014-03-28 20:30:00) [55]


> Оно должно быть 4 байта ровно, для секретных целей. =)


Приводи его к Integer, в чем проблема?


DQ   (2014-03-28 20:18:00) [56]

Оно должно быть 4 байта ровно, для секретных целей. =)
Временное решение в принципе работает, проверено, лишь жаль мешается лишняя названия.
Меня больше беспокоит что в if (z_second in ZS) не даёт вариантов выбора константы...


Германн   (2014-03-28 20:13:00) [57]


> Посмотрел SizeOf(ZSet) - он показывает 1 байт. Можно ли
> заставить его выравнивать до 4-х байт?

А нафига?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо