![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование типов данных "Перечисление" и "Множество" [D7, XP]
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-х байт?
А нафига?