Здравствуйте, UgN, Вы писали:
UgN>Здравствуйте, ilnar, Вы писали:
I>>сабж. I>>как узнать номер n-го установленного (1) бита внутри long? I>>не ли какой-либо команды процессора или какой-нибудь код для С/С++
Здравствуйте, ilnar, Вы писали:
I>сабж. I>как узнать номер n-го установленного (1) бита внутри long? I>не ли какой-либо команды процессора или какой-нибудь код для С/С++
Если еще интересует — в систему команд входит ряд команд Bit Test
BT, BTS, BTC, BTR — то что доктор прописал!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: как узнать номер n-го установленного (1) бита внутри
Здравствуйте, LaptevVV, Вы писали:
LVV>Здравствуйте, ilnar, Вы писали:
I>>сабж. I>>как узнать номер n-го установленного (1) бита внутри long? I>>не ли какой-либо команды процессора или какой-нибудь код для С/С++ LVV>Если еще интересует — в систему команд входит ряд команд Bit Test LVV>BT, BTS, BTC, BTR — то что доктор прописал!
а как их использовать? код можно?
Re[3]: как узнать номер n-го установленного (1) бита внутри
Здравствуйте, 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
Здравствуйте, ilnar, Вы писали:
I>сабж. I>как узнать номер n-го установленного (1) бита внутри long? I>не ли какой-либо команды процессора или какой-нибудь код для С/С++
Не знаю писали здесь или нет, но вот как делаю я.
Расчитывается LookUpTabel[256].
Анализ содержимого long сводится к анализу четырех значений LookUpTable, индексом которой служит значение первого,второго,третьего,четвертого байтов из long.
В итоге обычно за можно обойтись вообще без циклов.
Re[2]: как узнать номер n-го установленного (1) бита внутри
Здравствуйте, MShura, Вы писали:
MS>Здравствуйте, ilnar, Вы писали:
I>>сабж. I>>как узнать номер n-го установленного (1) бита внутри long? I>>не ли какой-либо команды процессора или какой-нибудь код для С/С++
MS>Не знаю писали здесь или нет, но вот как делаю я. MS>Расчитывается LookUpTabel[256]. MS>Анализ содержимого long сводится к анализу четырех значений LookUpTable, индексом которой служит значение первого,второго,третьего,четвертого байтов из long. MS>В итоге обычно за можно обойтись вообще без циклов.
плохо что обращение к памяти долго будет наверно, это критический момент, и еще, у меня массив long будет, как один непрерывный поток битов.
Re[3]: как узнать номер n-го установленного (1) бита внутри
Здравствуйте, 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) бита внутри
Здравствуйте, MShura, Вы писали:
MS>Вообще-то выбор алгоритма существенно зависит от цены jmp. MS>Например на DSP от Texas Instruments эта цена достаточно большая. MS>Если писать на asm то получишь непереносимый код, поскольку asm для каждого компилятора обычно имеет свои особенности. MS>Например для Watcom/GCC/MSVC синтаксис абсолютно разный.
а вот в в переводе из MSVC в GCC вид ассемблер я уж переведу быстро
Re: как узнать номер n-го установленного (1) бита внутри lon
Здравствуйте, ilnar, Вы писали:
I>сабж. I>как узнать номер n-го установленного (1) бита внутри long? I>не ли какой-либо команды процессора или какой-нибудь код для С/С++
Здравствуйте, 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) бита внутри
> ME>Я видел код (буквально пять строчек), который это делает без цикла за O(1). Вот только ссылку никак не могу найти > > а разве в "Алгоритмические трюки для программистов" этого нет?