![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
smartchecker |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 83 Регистрация: 7.9.2011 Пользователь №: 2853 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Хочется сделать банальный shift влево, а младший бит обнулить.
Что-то с ходу не вижу данную возможность в QBitArray. Как добиться желаемого с минимальными расходами? |
|
|
Алексей1153 |
![]()
Сообщение
#2
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
способ один - перебирая с старшего, каждый байт N сдвинуть влево на 1 бит оператором << , дописав затем в младший бит значение старшего бита N-1 байта (ещё не сдвинутого, естественно)
если критична скорость, а буфер достаточно длинный, то можно немного оптимизировать - выделить часть, кратную длине uint64_t и в ней сдвигать по первому методу, только не побайтно, а элементами uint64_t . Оставшийся хвост додвинуть побайтно. Ну и начать в данном случае лучше с начала буфера, кстати Сообщение отредактировал Алексей1153 - 14.10.2013, 17:12 |
|
|
Iron Bug |
![]()
Сообщение
#3
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
если размер битового массива статический, то std::bitset (также см. примеры использования).
если массив выделяется динамически, то могу порекомендовать boost::dynamic_bitset. там есть и сдвиги, и внешние операции приведения к разным типам данных, и прочее, и прочее. |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 27.2.2025, 7:14 |