Easyelectronics.ru

Электроника для всех
Текущее время: 29 сен 2020, 03:51

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Преобразование порядкового номера бита в число
СообщениеДобавлено: 19 май 2016, 21:01 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2014, 13:25
Сообщения: 983
Откуда: Earth
Доброго времени суток. Что-то мозг совсем не хочет работать. Как проще всего преобразовать порядковый номер бита в число, соответствующее его порядковому номеру. То есть из числа 00000100b получить 3, из 00001000b получить 4 и т.д., до 8 бита (нумерацию бит для удобства начинаю с 1, а не с 0).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование порядкового номера бита в число
СообщениеДобавлено: 19 май 2016, 21:04 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 6958
Сделать цикл, в котором переменная *2. Ее накладывать по & с образцом и останавливаться по TRUE. В результате счетчик цикла = "число".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование порядкового номера бита в число
СообщениеДобавлено: 19 май 2016, 21:11 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2013, 16:07
Сообщения: 711
Откуда: Германия
__builtin_ctz


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование порядкового номера бита в число
СообщениеДобавлено: 19 май 2016, 21:18 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2014, 13:25
Сообщения: 983
Откуда: Earth
Спасибо, оперативно, не ожидал))
По второму ответу. Я так понимаю это Си, а я на асме строчу, поэтому хотел именно алгоритм узнать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование порядкового номера бита в число
СообщениеДобавлено: 19 май 2016, 21:24 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2013, 16:07
Сообщения: 711
Откуда: Германия
Я к тому, что в зависимости от платформы, это может быть встроенная инструкция.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование порядкового номера бита в число
СообщениеДобавлено: 19 май 2016, 21:45 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 705
такой встроенной инструкции не встречал, хотя на ARM можно организовать.
алгоритм прост - 1:cnt+1; LSR ; jnz 1; счетчик +1, сдвиг в право, если не 0, повторить с начала. В результате в cnt(счетчик) будет количество повторений(бит) которых пришлось сдвинуть


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование порядкового номера бита в число
СообщениеДобавлено: 20 май 2016, 00:48 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 856
Как не странно, это сложная мат проблема. Я где-то целое исследование читал на тему того, как делать это правильно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование порядкового номера бита в число
СообщениеДобавлено: 20 май 2016, 06:02 
Старожил
Аватара пользователя

Зарегистрирован: 30 мар 2015, 23:56
Сообщения: 835
Gnusmas писал(а):
То есть из числа 00000100b получить 3, из 00001000b получить 4 и т.д.

Код:
static inline uint8_t unit_step (uint32_t in)
{
    uint8_t out;
    asm volatile    ("rbit  %[_out], %[_in]     \n\t" // реверс
                    "clz    %[_out], %[_out]    \n\t" // ведущие нули
                    :[_out] "=r" (out) :[_in] "r" (in):);
    return (out);
}

_________________
Потоковая OS


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование порядкового номера бита в число
СообщениеДобавлено: 20 май 2016, 22:55 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2014, 13:25
Сообщения: 983
Откуда: Earth
Всем спасибо, сделал пока вот так, вроде работает как надо:
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование порядкового номера бита в число
СообщениеДобавлено: 20 май 2016, 23:07 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 6958
"Как действовать теперь ?"
Точно так же (см. мой пост выше), только при нахождении 'mask & original = TRUE' не оканчивать цикл, а записывать(добавлять) счетчик цикла в буфер 'номеров битов', коей вы и желаете создать. Выход из цикла - когда будут перебраны все биты.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB