crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> 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. там есть и сдвиги, и внешние операции приведения к разным типам данных, и прочее, и прочее.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 7:48