![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 23.02.2009
Сообщений: 78
|
![]()
Доброго времени суток уважаемые форумчане.
есть число X, как мы знаем в памяти оно хранится как набор единиц и нулей например 13 это 1101 и т д задача: узнать положение ближайшей единицы, то-есть, четвертая с конца, значит бинарный размер = 4 предполагаю что делается на asm, благо в делфи его можно прикручивать. пытался сделать через trunc(log2(abs(x))+1), работало, но использование функций, работающих с ieee745 или как его там, к сожалению запрещено, подскажите, как можно найти позицию единички? заранее благодарю |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,372
|
![]()
подсчитайте сколько раз можно поделить на 2 без остатка.
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 23.02.2009
Сообщений: 78
|
![]()
это конечно гениально и я бы никогда не додумался, но работает это медленно и подход не верный. реализация уже есть, но для чисел, типа in64 достаточно больших работает медленно, да и использовать деление, когда я уверен что можно просто как то прочесть память, не совсем правильный подход. была бы задача столь тривиальной, я бы не спрашивал, в asm-е кто нибудь тут разбирается?
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
Biohazard, как это может долго работать?!!
Код:
|
![]() |
![]() |
![]() |
#5 | |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,372
|
![]() Цитата:
Там есть и алгоритм перевертывания данных + алгоритм поиска наиболее старшего бита. |
|
![]() |
![]() |
![]() |
#6 | |
Пользователь
Регистрация: 23.02.2009
Сообщений: 78
|
![]() Цитата:
Код:
|
|
![]() |
![]() |
![]() |
#7 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
![]()
__asm {
BSR rax, [N] INC rax MOV [k], rax } |
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 23.02.2009
Сообщений: 78
|
![]()
Спасибо, в асме я не силён, компилятор делфей ругается, может что то не так применяю?
Код:
Последний раз редактировалось Biohazard; 05.09.2014 в 14:23. |
![]() |
![]() |
![]() |
#9 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
![]()
то что я написал, оно для х64
для 32х бит (если N 64-х битное) можно как-то так LEA edx, [N] CMP DWORD PTR [edx+4], 0 JZ nohigh BSR eax, [edx+4] ADD eax, 33 JMP done nohigh: BSR eax, [edx] INC eax done: ; MOV [k], eax Последний раз редактировалось f.hump; 05.09.2014 в 14:43. Причина: ошибочко |
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 23.02.2009
Сообщений: 78
|
![]()
эх, на первую строку ругается, говорит [Error] Unit1.pas(38): Invalid register combination ну и т д, ладно, всё равно спасибо, попытаюсь дальще сам додуматься)
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
округление числа до целого | johny_03 | PHP | 1 | 16.04.2014 08:51 |
Изъятие из целого числа нулей | Sting95 | Помощь студентам | 2 | 31.03.2014 10:02 |
Угадывании целого числа | vonavi98 | Помощь студентам | 0 | 15.01.2014 19:22 |
Visual Basic: Описать функцию DigitN (K, N) целого типа, возвращающую N-ю цифру целого положительного числа К | Екатерина23 | Помощь студентам | 1 | 10.12.2013 09:25 |
Вывести числа целого неотр. числа | Gonzo | Помощь студентам | 11 | 04.05.2010 16:55 |