Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Set   Найти похожие ветки 

 
Ш-К   (2004-03-23 15:51) [0]

Как узнать, сколько элементов содержит переменная типа множество?


 
Fay ©   (2004-03-23 15:54) [1]

8


 
Тимохов ©   (2004-03-23 15:55) [2]

почему 8?


 
MBo ©   (2004-03-23 15:57) [3]

SizeOf и посчитать единичные биты


 
Digitman ©   (2004-03-23 15:58) [4]

посчитать в цикле результаты "правдивых" IN-операторов


 
Ш-К   (2004-03-23 16:07) [5]

MBo ©   (23.03.04 15:57) [3]
SizeOf всегда 32.
Привёл к integer. Как посчитаь единичные биты?

Digitman ©   (23.03.04 15:58) [4]
Так пока и делаю.


 
Тимохов ©   (2004-03-23 16:08) [6]

одним словом, штатных механизмов нет - нужно делать самому.
когда то это делал как в 3 через конструкцию absolute.


 
Digitman ©   (2004-03-23 16:09) [7]


> Ш-К


> Как посчитаь единичные биты?


нампример, циклическим (от 0 до 31) сдвигом вправо и анализом состояния мл.бита рез-та


> Так пока и делаю


что в этом плохого ?


 
Тимохов ©   (2004-03-23 16:09) [8]


> Привёл к integer. Как посчитаь единичные биты?

с помощью битовых операций shl и and.


 
Fay ©   (2004-03-23 16:09) [9]

Народ, извините. Просто задолбался на работе и тупо ткнул в клаву. Попал в 8.


 
Digitman ©   (2004-03-23 16:11) [10]


> тупо ткнул в клаву


по-мужски) ... клава была довольна, надеюсь)


 
cosinus ©   (2004-03-23 16:12) [11]

>>Digitman ©   (23.03.04 16:11) [10]
:))


 
Тимохов ©   (2004-03-23 16:12) [12]


> Ш-К   (23.03.04 16:07) [5]
> MBo ©   (23.03.04 15:57) [3]
> SizeOf всегда 32.
> Привёл к integer. Как посчитаь единичные биты?

32 - это байты.
приводите к области памяти из 32 байт, например к packed array [0..31] of byte


 
Fay ©   (2004-03-23 16:15) [13]

Ваще говоря, отсутствие этих самых механизмов может говорить о том, что set-ы придуманы для задач, в которых количество элементов считать не принято.


 
Ш-К   (2004-03-23 16:21) [14]

Digitman ©   (23.03.04 16:09) [7]
512 итераций в случае заполненого множества до предела.
В принципе и не страшно.

Тимохов ©   (23.03.04 16:12) [12]
32 это биты, тоже парюсь.


 
MBo ©   (2004-03-23 16:26) [15]

>SizeOf всегда 32.
Не всегда
type
 TShortSet=set of 0..7;
begin
Caption:=IntToStr(SizeOf(TShortSet));


 
Плохиш   (2004-03-23 16:26) [16]

>Ш-К   (23.03.04 16:21) [14]

> 32 это биты,

Т.е. Ви хатите сказат, что в Set можно сохранит толко 32 элемента?


 
Ш-К   (2004-03-23 16:29) [17]

MBo ©   (23.03.04 16:26) [15]
Плохиш   (23.03.04 16:26) [16]

Это у меня всегда (по определению) :)


 
Тимохов ©   (2004-03-23 16:30) [18]

вопрос то в чем - все равно перебором, либо через битовые операции либо через in.


 
Плохиш   (2004-03-23 16:32) [19]

>Ш-К   (23.03.04 16:29) [17]
[16] было к тому, что 32 - это байты


 
Плохиш   (2004-03-23 16:33) [20]


> Тимохов ©   (23.03.04 16:30) [18]
> вопрос то в чем - все равно перебором, либо через битовые
> операции либо через in.

Ой, пардон, я думал, что после [13] раз ветка не закрыта, то мы в потрепаться ;-)


 
MBo ©   (2004-03-23 16:40) [21]


procedure TForm1.Button1Click(Sender: TObject);
type
 TShortSet = set of 0..31;
var
 ss: TShortSet;
 pb: PByteArray;
 i, n: Integer;
 function BitCount(b: byte): byte;
 begin
   b := (b and $55) + (b shr 1) and $55;
   b := (b and $33) + (b shr 2) and $33;
   b := (b and $0F) + (b shr 4) and $0F;
   Result := b;
 end;
begin
 ss := [0, 15, 23];
 pb := @ss;
 n := 0;
 for i := 0 to SizeOf(ss) - 1 do
   Inc(n, BitCount(pb[i]));
 Caption := IntToStr(n);
end;



 
Ш-К   (2004-03-23 16:56) [22]

Всем спасибо.
MBo ©  большое.


 
MBo ©   (2004-03-23 17:10) [23]

З.Ы.
Для твоего случая, если всегда множество мощности 32 элемента, можно обойтись без цикла, приведя к Integer и добавив пару строк, маски $55555555,$33333333,$0F0F0F0F, $00FF00FF, $0000FFFF


 
Ш-К   (2004-03-23 17:27) [24]

MBo ©   (23.03.04 17:10) [23]
Ну так я и говорил, что привёл к интежер :))))



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.032 c
1-1082471366
ReNoiZer
2004-04-20 18:29
2004.04.11
компиляция midas и dbExpress dll s прямо в приложение...


3-1078984791
ГАГН
2004-03-11 08:59
2004.04.11
DBComboBox?


14-1082210609
Chainik
2004-04-17 18:03
2004.04.11
Виснет система. Помогите разобраться.


1-1082972647
AlexEagle1
2004-04-26 13:44
2004.04.11
Интерфейс в стиле Office2003


3-1081502044
_sulent
2004-04-09 13:14
2004.04.11
Сжатие базы