Russian Qt Forum
Ноябрь 26, 2024, 00:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Битовые операции с элементом QByteArray  (Прочитано 7984 раз)
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 вида, описанного выше. Заранее спасибо, надеюсь, объяснил понятно чего хочу.
« Последнее редактирование: Июль 25, 2014, 07:17 от raccoon » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Июль 25, 2014, 07:25 »

Код
C++ (Qt)
unsigned char b = ( n << 3 ) | ( d & 7 );
 
Записан
raccoon
Гость
« Ответ #2 : Июль 25, 2014, 07:31 »

Old, спасибо! А не могли бы вы объяснить, как это работает ?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Июль 25, 2014, 07:43 »

Сдвиг на 3 бита влево и логический OR для установки младших бит из d - логические операции.
Записан
s_Creator
Гость
« Ответ #4 : Июль 25, 2014, 16:22 »

логический OR  это ||
а у здесь побитовый AND (&) с числом 7 обнуляет старшие биты числа d и побитовый OR (|) сращивает числа n и d
так что 5 старших битов занимает n, а 3 младших d
(имхо)
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #5 : Июль 25, 2014, 16:25 »

логический OR  это ||
а у здесь побитовый AND (&) с числом 7 обнуляет старшие биты числа d и побитовый OR (|) сращивает числа n и d
так что 5 старших битов занимает n, а 3 младших d
(имхо)
Все все эти операции or, and, xor - логические. Только одни работают с битами, а другие с bool.
Записан
s_Creator
Гость
« Ответ #6 : Июль 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/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
« Последнее редактирование: Июль 25, 2014, 16:46 от s_Creator » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #7 : Июль 25, 2014, 17:00 »

Это вы топикстартеру адресуйте/рекомендуйте. Мне это давным давно не надо.
Специально их различают или случайно, а они как были логическими так и остались, побитные они или нет - дело десятое.
« Последнее редактирование: Июль 25, 2014, 17:09 от Old » Записан
s_Creator
Гость
« Ответ #8 : Июль 25, 2014, 21:06 »

побитные они или нет - дело десятое.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.074 секунд. Запросов: 23.