![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Crafty |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 3.11.2008 Репутация: 12 Всего: 14 |
Необходимо написать функцию, которая меняет порядок битов в целом числе без знака на обратный.
Вот кое-что написал, посоветуйте как можно улучшить функцию reverseBits.
|
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 2 Всего: 121 |
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
Soah |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 18.2.2009 Репутация: 6 Всего: 54 |
|
|||
|
||||
Леопольд |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Это тоже самое что и x = ~x Т.е. не то. Не думаю что можно так просто сделать. Наверное, всё же, придётся в цикле.
По моему, так попроще выглядит ![]() Это сообщение отредактировал(а) Леопольд - 13.7.2009, 20:51 -------------------- вопросов больше чем ответов |
||||||
|
|||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Меня устраивает полностью. Но для универа не подойдёт. Я бы шаблон написал... ![]() -------------------- вопросов больше чем ответов |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
(для x86-32) Добавлено через 9 минут и 48 секунд ого! нафига делать за "3-4" операции если там деление и умножение %) както это нежизнеспособно ниразу Это сообщение отредактировал(а) GoldFinch - 13.7.2009, 20:53 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
я тоже сначала только 1 заметил
|
|||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Я видел два. Но суть не в этом. Была просьба "подправить" уже написанную функцию, что я и сделал... На первый взгляд "Reverse bits the obvious way" самый простой. Но он уже оптимизирован, причём несколькими людьми, в течении нескольких лет... ![]() Это сообщение отредактировал(а) Леопольд - 13.7.2009, 21:34 -------------------- вопросов больше чем ответов |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 2 Всего: 121 |
Ты забыл добавить: x86-32-MSC++(=> Win32 only) Не более, чем у тебя ![]() -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
W4FhLF, с точки зрения наглядности, цикл лучше всего,
с точки зрения быстродействия мой вариант лучше их умножения. |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 2 Всего: 121 |
Ну во-первых твой вариант можно переписать без потери переносимости. А во-вторых, я думаю когда ты его писал, то занимался premature optimization. Есть измерения, на каких объёмах эта оптимизация становится оправдана для среднестатистических десктопов? -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
W4FhLF, я что в голову пришло, то и написал, никакой оптимизации.
правда я было думал что в MSVC есть интринсик __bswap(), а оказалось его нет. Добавлено через 4 минуты и 11 секунд а то что по сравнению с циклом это premature optimization - не факт. это чистая функция с вполне понятным названием и прототипом. то как она реализована - никак не влияет на код где она используется. время на ее написание - примерно такое же как и на написание цикла (если понимаешь что делаешь) читается легко (если понимаешь что делают сдвиги и маски) |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
солидарен с GoldFinch - никакой преждевременной оптимизации (__bswap не расматриваем) тут нет, просто реализация иного алгоритма, функция изначально преднаначена для реализации некой двоичной логики, и для программиста с точки зрения временных затрат, если он нормально ориентируется в двоичной с.с.,такой вариант, ничуть не сложней циклического подхода. ![]() P.S. только вместо inta все ж лучше использовать unsigned. (будем считать что опечатка ![]() Это сообщение отредактировал(а) mes - 14.7.2009, 13:52 |
||||
|
|||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 2 Всего: 121 |
Да я вообще-то тоже за подход с масками и сдвигами, но без ассемблера, он там не нужен.
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
W4FhLF, глупо реализовывать bswap если она уже есть
|
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 2 Всего: 121 |
GoldFinch, глупо терять переносимость не получая ничего взамен.
Добавлено через 1 минуту и 43 секунды
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
W4FhLF, оно у тебя только 16разрядные слова местами меняет, а нада еще байты поменять
меня так просто жаба душит 1 инструкцию на 5-6 операций заменять ради переносимости на не-х86 |
|||
|
||||
W4FhLF |
|
||||||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 2 Всего: 121 |
Не проблема переделать. Хотя для задачи и не требуется.
Что-то твой код у меня вообще неправильно работает. А переносимости у него нет даже в пределах одной аппаратной платформы, между компиляторами (http://www.comeaucomputing.com/tryitout/). Плюс у тебя в коде идёт вызов доп. процедуры (__bswap), студия не инлайнит её на /O2. Из-за этого происходит сброс конвеера, а это куда хуже 3-4 операций сдвига и or. Это сообщение отредактировал(а) W4FhLF - 14.7.2009, 16:54 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
||||||
|
|||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
W4FhLF, я его не проверял, неудивительно что не работает
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |