Re[7]: как узнать номер n-го установленного (1) бита внутри
От: MaximE Великобритания  
Дата: 02.05.03 17:38
Оценка:
Здравствуйте, LCR, Вы писали:

LCR> Это просто библиотека классов (см на sourceforge).


совсем не просто
Re[8]: как узнать номер n-го установленного (1) бита внутри
От: LCR Россия lj://_lcr_
Дата: 03.05.03 06:27
Оценка:
Здравствуйте, MaximE, Вы писали:

ME>совсем не просто


А если глянуть реализацию, то это даже сложно
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[2]: как узнать номер n-го установленного (1) бита внутри
От: _Dmitry_  
Дата: 21.04.04 07:38
Оценка:
Здравствуйте, UgN, Вы писали:

UgN>Здравствуйте, ilnar, Вы писали:


I>>сабж.

I>>как узнать номер n-го установленного (1) бита внутри long?
I>>не ли какой-либо команды процессора или какой-нибудь код для С/С++


UgN>

UgN>char GetBitPos( long n )
UgN>{
UgN>   char pos = 0;
UgN>   if(n & 0xFFFF0000) pos = 16, n >>= 16;
UgN>   if(n & 0x0000FF00) pos += 8, n >>= 8;
UgN>   if(n & 0x000000F0) pos += 4, n >>= 4;
UgN>   if(n & 0x0000000C) pos += 2, n >>= 2;
UgN>   if(n & 0x00000002) pos += 1;
UgN>   return pos;
UgN>};
UgN>
Re: как узнать номер n-го установленного (1) бита внутри lon
От: LaptevVV Россия  
Дата: 21.04.04 09:50
Оценка:
Здравствуйте, ilnar, Вы писали:

I>сабж.

I>как узнать номер n-го установленного (1) бита внутри long?
I>не ли какой-либо команды процессора или какой-нибудь код для С/С++
Если еще интересует — в систему команд входит ряд команд Bit Test
BT, BTS, BTC, BTR — то что доктор прописал!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: как узнать номер n-го установленного (1) бита внутри
От: ilnar Россия  
Дата: 21.04.04 09:52
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, ilnar, Вы писали:


I>>сабж.

I>>как узнать номер n-го установленного (1) бита внутри long?
I>>не ли какой-либо команды процессора или какой-нибудь код для С/С++
LVV>Если еще интересует — в систему команд входит ряд команд Bit Test
LVV>BT, BTS, BTC, BTR — то что доктор прописал!

а как их использовать? код можно?
Re[3]: как узнать номер n-го установленного (1) бита внутри
От: LaptevVV Россия  
Дата: 21.04.04 10:03
Оценка:
Здравствуйте, ilnar, Вы писали:

I>>>как узнать номер n-го установленного (1) бита внутри long?

I>>>не ли какой-либо команды процессора или какой-нибудь код для С/С++
LVV>>Если еще интересует — в систему команд входит ряд команд Bit Test
LVV>>BT, BTS, BTC, BTR — то что доктор прописал!

I>а как их использовать? код можно?


bt ax,5         ;проверить значение 5-го бита - переносит бит в cf
;
mov ax, 10
bts pole, ax     ; проверить и установить 10-й бит в pole

Юолее подробно надо справочник по ассемблеру поднимать.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: как узнать номер n-го установленного (1) бита внутри lon
От: MShura  
Дата: 21.04.04 10:19
Оценка: 1 (1) +1
Здравствуйте, ilnar, Вы писали:

I>сабж.

I>как узнать номер n-го установленного (1) бита внутри long?
I>не ли какой-либо команды процессора или какой-нибудь код для С/С++

Не знаю писали здесь или нет, но вот как делаю я.
Расчитывается LookUpTabel[256].
Анализ содержимого long сводится к анализу четырех значений LookUpTable, индексом которой служит значение первого,второго,третьего,четвертого байтов из long.
В итоге обычно за можно обойтись вообще без циклов.
Re[2]: как узнать номер n-го установленного (1) бита внутри
От: ilnar Россия  
Дата: 21.04.04 10:23
Оценка:
Здравствуйте, MShura, Вы писали:

MS>Здравствуйте, ilnar, Вы писали:


I>>сабж.

I>>как узнать номер n-го установленного (1) бита внутри long?
I>>не ли какой-либо команды процессора или какой-нибудь код для С/С++

MS>Не знаю писали здесь или нет, но вот как делаю я.

MS>Расчитывается LookUpTabel[256].
MS>Анализ содержимого long сводится к анализу четырех значений LookUpTable, индексом которой служит значение первого,второго,третьего,четвертого байтов из long.
MS>В итоге обычно за можно обойтись вообще без циклов.

плохо что обращение к памяти долго будет наверно, это критический момент, и еще, у меня массив long будет, как один непрерывный поток битов.
Re[3]: как узнать номер n-го установленного (1) бита внутри
От: MShura  
Дата: 21.04.04 10:39
Оценка:
Здравствуйте, ilnar, Вы писали:

I>Здравствуйте, MShura, Вы писали:


MS>>Здравствуйте, ilnar, Вы писали:


I>>>сабж.

I>>>как узнать номер n-го установленного (1) бита внутри long?
I>>>не ли какой-либо команды процессора или какой-нибудь код для С/С++

MS>>Не знаю писали здесь или нет, но вот как делаю я.

MS>>Расчитывается LookUpTabel[256].
MS>>Анализ содержимого long сводится к анализу четырех значений LookUpTable, индексом которой служит значение первого,второго,третьего,четвертого байтов из long.
MS>>В итоге обычно за можно обойтись вообще без циклов.

I>плохо что обращение к памяти долго будет наверно, это критический момент, и еще, у меня массив long будет, как один непрерывный поток битов.


Такие алгоритмы я использую в своей файловой системе для поиска свободных кластеров.
Такой-же алгоритм, как оказалось, использует MS в коде NTFS для работы с битмапом занятых кластеров.

Вообще-то выбор алгоритма существенно зависит от цены jmp.
Например на DSP от Texas Instruments эта цена достаточно большая.
Если писать на asm то получишь непереносимый код, поскольку asm для каждого компилятора обычно имеет свои особенности.
Например для Watcom/GCC/MSVC синтаксис абсолютно разный.
Re[4]: как узнать номер n-го установленного (1) бита внутри
От: ilnar Россия  
Дата: 21.04.04 10:56
Оценка:
Здравствуйте, MShura, Вы писали:

MS>Вообще-то выбор алгоритма существенно зависит от цены jmp.

MS>Например на DSP от Texas Instruments эта цена достаточно большая.
MS>Если писать на asm то получишь непереносимый код, поскольку asm для каждого компилятора обычно имеет свои особенности.
MS>Например для Watcom/GCC/MSVC синтаксис абсолютно разный.

а вот в в переводе из MSVC в GCC вид ассемблер я уж переведу быстро
Re: как узнать номер n-го установленного (1) бита внутри lon
От: avbochagov Россия  
Дата: 21.04.04 11:22
Оценка:
Здравствуйте, ilnar, Вы писали:

I>сабж.

I>как узнать номер n-го установленного (1) бита внутри long?
I>не ли какой-либо команды процессора или какой-нибудь код для С/С++

А почему так нельзя?

struct BITS
{
    unsigned b0:1;
    unsigned b1:1;
    unsigned b2:1;
    unsigned b3:1;
    unsigned b4:1;
    unsigned b5:1;
    unsigned b6:1;
    unsigned b7:1;
    unsigned b8:1;
    unsigned b9:1;
    unsigned b10:1;
    unsigned b11:1;
    unsigned b12:1;
    unsigned b13:1;
    unsigned b14:1;
    unsigned b15:1;
    unsigned b16:1;
    unsigned b17:1;
    unsigned b18:1;
    unsigned b19:1;
    unsigned b20:1;
    unsigned b21:1;
    unsigned b22:1;
    unsigned b23:1;
    unsigned b24:1;
    unsigned b25:1;
    unsigned b26:1;
    unsigned b27:1;
    unsigned b28:1;
    unsigned b29:1;
    unsigned b30:1;
    unsigned b31:1;
};

int main(int argc, char* argv[])
{
    long z = 8192;
    BITS* p = (BITS*)&z;
    return 0;
}


Остается только проверить
    if( p->b13 )
    {
        doSomeThing();
    }
... << RSDN@Home 1.1.3 stable >>
Re[2]: как узнать номер n-го установленного (1) бита внутри
От: ilnar Россия  
Дата: 21.04.04 11:26
Оценка:
Здравствуйте, avbochagov, Вы писали:

A>Здравствуйте, ilnar, Вы писали:


I>>сабж.

I>>как узнать номер n-го установленного (1) бита внутри long?
I>>не ли какой-либо команды процессора или какой-нибудь код для С/С++

A>А почему так нельзя?


задача в другом, есть long, допустим для примера 100110001010010001
нужно найти номер 4-го установленного в 1 бита, ответ: 9 (слева)
Re[3]: как узнать номер n-го установленного (1) бита внутри
От: Аноним  
Дата: 21.04.04 11:54
Оценка:
Здравствуйте, MaximE, Вы писали:

ME>Здравствуйте, Кодт, Вы писали:


К>>за O(N)


ME>[]


К>>За O(log N) — двоичный поиск: x<>2^16? x<>2^8? и так далее.


ME>[]


ME>Я видел код (буквально пять строчек), который это делает без цикла за O(1). Вот только ссылку никак не могу найти


а разве в "Алгоритмические трюки для программистов" этого нет?
Re[4]: как узнать номер n-го установленного (1) бита внутри
От: MaximE Великобритания  
Дата: 21.04.04 17:42
Оценка:
> ME>Я видел код (буквально пять строчек), который это делает без цикла за O(1). Вот только ссылку никак не могу найти
>
> а разве в "Алгоритмические трюки для программистов" этого нет?

Есть.

Но когда писался тот постинг я книжки не читал

--
Maxim Egorushkin
MetaCommunications Engineering
http://www.meta-comm.com/engineering/
Posted via RSDN NNTP Server 1.8 beta
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.