Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 137

Преобразование порядкового номера бита в число

18.05.2016, 20:14. Показов 5642. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Что-то мозг совсем не хочет работать. Как проще всего преобразовать порядковый номер бита в число, соответствующее его порядковому номеру. То есть из числа 00000100b получить 3, из 00001000b получить 4 и т.д., до 8 бита (нумерацию бит для удобства начинаю с 1, а не с 0).
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.05.2016, 20:14
Ответы с готовыми решениями:

Преобразование порядкового номера дня в году в дату
Добрый день! Нужно зная порядковый номер для года, получить дату. Например: 12 - 12 January 52 - 21 February и т.д. На...

Вычислить месяц и число на основе порядкового номера дня и года
Здравствуйте. Подскажите, какой алгоритм использовать для решения следующей задачи: Вводятся с клавиатуры порядковый номер дня года и...

Построить гистограмму, показывающую число единиц в двоичном числе в зависимости от его порядкового номера.
1. Указать то целое число и его порядковый номер при вводе, которое в двоичном представлении имеет наибольшее число единиц среди...

9
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,113
18.05.2016, 20:17
Сделать цикл, в котором переменная *2. Ее накладывать по & с образцом и останавливаться по TRUE. В результате счетчик цикла = "число".
0
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
18.05.2016, 20:24
__buyltin_ctz
0
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 137
18.05.2016, 20:31
Спасибо, оперативно, не ожидал))
По второму ответу. Я так понимаю это Си, а я на асме строчу, поэтому хотел именно алгоритм узнать.
0
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
18.05.2016, 20:37
Я к тому, что в зависимости от платформы, это может быть встроенная инструкция.
0
1 / 1 / 0
Регистрация: 08.05.2015
Сообщений: 225
18.05.2016, 20:58
такой встроенной инструкции не встречал, хотя на ARM можно организовать.
алгоритм прост - 1:cnt+1; LSR ; jnz 1; счетчик +1, сдвиг в право, если не 0, повторить с начала. В результате в cnt(счетчик) будет количество повторений(бит) которых пришлось сдвинуть
0
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
19.05.2016, 00:01
Как не странно, это сложная мат проблема. Я где-то целое исследование читал на тему того, как делать это правильно.
0
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 316
19.05.2016, 05:15
Цитата Сообщение от Kmusmos
То есть из числа 00000100b получить 3, из 00001000b получить 4 и т.д.
Code
1
2
3
4
5
6
7
8
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);
}
0
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 137
19.05.2016, 22:08
Всем спасибо, сделал пока вот так, вроде работает как надо:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
; входные данные: в KeyByte выставлен 1 любой бит
Main:
mov     Counter,#0
mov     A,      KeyByte
Loop:
mov     Temp_Counter,Counter
cjne    Temp_Counter,#8,Skip
jmp     Main
Skip:
yms     Counter
rrc     A
jnc     Loop
; здесь мы получаем в Counter число, соответствующее порядковому номеру выставленного в KeyByte бита
Но теперь я немного усложняю себе задачу, и мне надо получить номера всех выставленных битов. Возьмем даже самый "тяжелый" случай: число 11111111b должно быть преобразовано в числа от 1 до 8. Как действовать теперь ?
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,113
19.05.2016, 22:20
"Как действовать теперь ?"
Точно так же (см. мой пост выше), только при нахождении mask & original = TRUE не оканчивать цикл, а записывать(добавлять) счетчик цикла в буфер номеров битов, коей вы и желаете создать. Выход из цикла - когда будут перебраны все биты.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.05.2016, 22:20
Помогаю со студенческими работами здесь

Прочесть информацию, отталкиваясь номера строки файла и порядкового номера первого симвала в строке
не стал создавать новую темку, решил что тут тоже задать вопрос можна.... есть регулярно обновляющийся текстовый файл, из которого мне...

Дано число. Создать 2 переменные одна из которых хранит 4 старших бита исходного числа, другая 4 младших бита
− Написать код функции, принимающей в качестве аргументов и возвращающей все необходимые параметры, без использования глобальных...

Извлечь 3 бита числа A, начиная со второго и вставить их в число B, начиная с первого бита
Ввести целое A. Извлечь 3 бита числа A, начиная со второго и вставить их в число B, начиная с ервогоп бита. B=1A05h.

Изменение порядкового номера
Добрый вечер, уважаемые форумчани :) 3 день ломаю голову, не как не могу понять как сделать следующее: У меня есть база, где...

Определение порядкового номера
есть файл с каким то кол-вом чисел, программа должна считать и записать числа с определенными порядковыми номерами в новый файл. например...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru