Russian Qt Forum

Qt => Вопросы новичков => Тема начата: raccoon от Июль 25, 2014, 07:14



Название: Битовые операции с элементом QByteArray
Отправлено: raccoon от Июль 25, 2014, 07:14
Здравствуйте. У меня такая проблема.
Есть массив QByteArray , назовём его ret
Есть 2 переменных типа int
int n; //принимает значение от 1 до 28
int d; //принимает значение от 0 до 3
Так вот , в массив ret нужно добавить элемент (байт) в котором биты распределены следующим образом, тоесть в первых 5ти битах переменная n а в последних 3х переменная d;
Вот "нарисовал"
|---|---|---|---|---|---|---|---|
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
|<-------n------->|<---d--->|
|---|---|---|---|---|---|---|---|
Тоесть посути нужен метод(функция), который принимает две int и возвращает один QByteArray вида, описанного выше. Заранее спасибо, надеюсь, объяснил понятно чего хочу.


Название: Re: Битовые операции с элементом QByteArray
Отправлено: Old от Июль 25, 2014, 07:25
Код
C++ (Qt)
unsigned char b = ( n << 3 ) | ( d & 7 );
 


Название: Re: Битовые операции с элементом QByteArray
Отправлено: raccoon от Июль 25, 2014, 07:31
Old, спасибо! А не могли бы вы объяснить, как это работает ?


Название: Re: Битовые операции с элементом QByteArray
Отправлено: Old от Июль 25, 2014, 07:43
Сдвиг на 3 бита влево и логический OR для установки младших бит из d - логические операции.


Название: Re: Битовые операции с элементом QByteArray
Отправлено: s_Creator от Июль 25, 2014, 16:22
логический OR  это ||
а у здесь побитовый AND (&) с числом 7 обнуляет старшие биты числа d и побитовый OR (|) сращивает числа n и d
так что 5 старших битов занимает n, а 3 младших d
(имхо)


Название: Re: Битовые операции с элементом QByteArray
Отправлено: Old от Июль 25, 2014, 16:25
логический OR  это ||
а у здесь побитовый AND (&) с числом 7 обнуляет старшие биты числа d и побитовый OR (|) сращивает числа n и d
так что 5 старших битов занимает n, а 3 младших d
(имхо)
Все все эти операции or, and, xor - логические. Только одни работают с битами, а другие с bool.


Название: Re: Битовые операции с элементом QByteArray
Отправлено: s_Creator от Июль 25, 2014, 16:33
Все все эти операции or, and, xor - логические. Только одни работают с битами, а другие с bool.
это справедливо для Delphi где вы пишите именно or and и для битовых и для логических операций.
а в С++ специально различают || и |.
Поменяйте у себя | на || и расскажите результаты.
Edit:http://www.c-cpp.ru/books/bitovye-operatory (http://www.c-cpp.ru/books/bitovye-operatory)
http://www.c-cpp.ru/books/operatory-otnosheniya-i-logicheskie-operatory (http://www.c-cpp.ru/books/operatory-otnosheniya-i-logicheskie-operatory)
Edit:из википедии:
Цитировать
Ряд источников по языкам низкого уровня называет побитовые логические операции просто логическими[1][2], но в терминологии программирования на языках высокого уровня в названиях битовых операций присутствуют прилагательные битовый, побитовый (например: «побитовое логическое И», оно же «побитовое умножение»), поразрядный.
http://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8 (http://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8)


Название: Re: Битовые операции с элементом QByteArray
Отправлено: Old от Июль 25, 2014, 17:00
Это вы топикстартеру адресуйте/рекомендуйте. Мне это давным давно не надо.
Специально их различают или случайно, а они как были логическими так и остались, побитные они или нет - дело десятое.


Название: Re: Битовые операции с элементом QByteArray
Отправлено: s_Creator от Июль 25, 2014, 21:06
побитные они или нет - дело десятое.