Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.064 c