![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 13.10.2011
Сообщений: 143
|
![]()
Нужно узнать максимальный индекс/номер (считая справа, от меньшего) единицы в битовом виде у UInt32/Int32, то есть у последовательности из 4 байтов. Например,
x = 00000000 00000000 00100110 00001110 индекс = 13 (считая с 0) Проблема, уверен, не нова. Алгоритм, разумеется, нужен быстрый. Единственное, что придумал, сдвигать вправо, пока x != 0 и считать кол-во сдвигов.
Все имена, фамилии, ники, даты и события упоминаемые в моих постах, являются вымышленными. Все совпадения с реально существующими - случайны.
![]() |
![]() |
![]() |
![]() |
#2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,430
|
![]()
Мне кажется, вполне нормальный алгоритм.
В том же ассемблере есть команда для возврата такого номера, но она, вроде, работает медленнее, чем метод со сдвигом.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 13.10.2011
Сообщений: 143
|
![]()
Метод со сдвигом использует цикл while и для моих нужд работает явно не достаточно быстро. Желательно какую-то идею без циклов.
Все имена, фамилии, ники, даты и события упоминаемые в моих постах, являются вымышленными. Все совпадения с реально существующими - случайны.
![]() |
![]() |
![]() |
![]() |
#4 |
мальчик-помогай =)
Форумчанин
Регистрация: 16.09.2010
Сообщений: 522
|
![]()
Генри Уоррен "алгоритмические трюки для программистов" глава 6
а вообще, неужели bsr/bsf так медленны? что-то даже я тормозов не заметил, хоть весьма серьёзно к скорости отношусь |
![]() |
![]() |
![]() |
#5 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,430
|
![]()
Сделать ассемблерную вставку?)
Только не обязательно ускорится. GreenWizard, да, вы правы, конечно не медленны ![]()
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#6 |
мальчик-помогай =)
Форумчанин
Регистрация: 16.09.2010
Сообщений: 522
|
![]()
делал как-то я сравнение строк блоками по 4 байта (прототип для сравнения по 16 на sse)... писал на Паскале, а асм-код вовсе отдельной функцией... даже при таком расклад ускорение 3-3.5 раз т.е. bsr/bsf очень хороший вариант... скорость приемлемая и нет мороки с алгоритмом
если проблемы возникают, то в 90% случаев из-за подхода самого |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Для числа X проверить возможность представления данного числа в виде заданной степенной функции. | migraine | Помощь студентам | 0 | 06.12.2011 22:01 |
Составить программу которая находит индекс числа в массиве случайных чисел | MadNikys | Помощь студентам | 9 | 03.03.2010 20:52 |
Индекс числа | VenomMag55 | Помощь студентам | 2 | 09.02.2010 16:09 |
Как числа в двоичном виде вывести в столбик по 4 числа? | Equalizer | Общие вопросы C/C++ | 11 | 27.09.2009 14:15 |
Даны числа от 100 до 999. Вводится индекс... | Ci_novice | Помощь студентам | 4 | 19.04.2008 12:59 |