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