![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| BBulat |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 5.12.2006 Репутация: нет Всего: нет |
Есть 32-битное слово, в нем нужно зеркально отразить первые 16 бит, т.е. 0-й бит поставить на место 15-го, а 15-й на место 0-го и т.д.
Задача решается путем последовательного наложения масок 0х8000 и 0х1 на исходное число и смещения этих масок вправо и влево на 1 бит соответственно.
но этот код требует слишком много операций. Можно как-нибудь ускорить эту прогу? Заранее благодарен! |
|||
|
||||
| FiMa1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
Под операцией реверса байтов подразумевается аналогичное отображение четырех байтов регистра. Операция реверса байтов необходима при преобразовании данных между форматом, когда первым идет младший байт (little-endian), который используется, например, DEC и Intel, и форматом, когда первым идет старший байт (big-endian), использующийся большинством других производителей.
Ниже показан эффективный метод реверса битов в слове: в первой строке меняются местами соседние биты, во второй — соседние 2-битовые поля и т.д. Все пять операторов присвоения можно выполнять в произвольном порядке. Уоррен Г. Алгоритмические трюки для программистов.
Это сообщение отредактировал(а) FiMa1 - 29.8.2007, 09:02 |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Здесь я приводил оптимизированный на скорость и размер вариант решения задачи.
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |