Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
2 / 2 / 0
Регистрация: 24.11.2015
Сообщений: 52
1

Битовые операции с отрицательными числами и QByteArray

02.04.2016, 20:07. Показов 1772. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Накидал простенький код для объяснения ситуации.
Есть цикл, в нем счетчик от -512 до 512, с каждой итерации он добавляет одно число в QByteArray и вызывает функцию add(). Функция add достает из этого QByteArray число и выводит в текстовое поле. Так вот, когда счетчик достигает 384, в функции add читается -128. Не могу понять почему. Объясните пожалуйста. Вроде как по логике должно быть все нормально
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void MainWindow :: test()
{
    qint16 count = -512;
    for (int i = 0; i < 1023; i++)
    {
        QByteArray data;
        data.append(count);
        data.append(count >> 8);
        add(data);
        count++;
    }
}
void MainWindow :: add(QByteArray data)
{
    qint16 value = data.at(0) | (data.at(1) << 8);
    ui->textEdit->append(QString :: number(value));
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.04.2016, 20:07
Ответы с готовыми решениями:

Битовые операции с числами
&lt;?php ## Распаковка значений из битового поля echo &quot;Примитив: &quot; . (126076330 &amp; 3) . &quot;&lt;br...

Операции с отрицательными числами
Назрела проблема с отрицательными числами. Собственно, как произвести соответствующую операцию...

Битовые операции с 64 битными числами (STM32)
Доброго Вам всем вечера, пытаюсь прочитать значение переменной unsigned long long при помощи...

Битовые операции, битовые поля.
Здравствуйте! Еслть 4 диапазона чисел: 0-100, 0-100, 0-6000, 0-3. Сделать в виде битовых операций....

3
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
02.04.2016, 21:30 2
Лучший ответ Сообщение было отмечено ___Cepera___ как решение

Решение

Цитата Сообщение от ___Cepera___ Посмотреть сообщение
Так вот, когда счетчик достигает 384, в функции add читается -128. Не могу понять почему.
А то что когда счетчик достигает 255, функция add() "считает" -1 это не смущает? Или когда счетчик -257 функция "считает" тоже -1? Почему удивляет именно 384 и чем?

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <QtCore>
 
int main()
{
    for (int i = -512; i < 513; ++i)
    {
        QByteArray data;
        data.append(i);
        data.append(i >> 8);
        
        qint16 value = ((uint8_t)data.at(1) << 8) | (uint8_t)data.at(0);
        // или так
        //qint16 value = data.at(0) & 0xFF | (data.at(1) & 0xFF) << 8;
        qDebug() << i << " : " << value;
    }
    return 0;
}
1
2 / 2 / 0
Регистрация: 24.11.2015
Сообщений: 52
03.04.2016, 15:31  [ТС] 3
pav1uxa Спасибо за ответ. 384 потому что первое число с которого начиналось не пойми что. Вообще я думал, что QByteArray обрезает лишние биты сам, а тут вон оно что
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
04.04.2016, 11:38 4
Цитата Сообщение от ___Cepera___ Посмотреть сообщение
Спасибо за ответ. 384 потому что первое число с которого начиналось не пойми что. Вообще я думал, что QByteArray обрезает лишние биты сам, а тут вон оно что
Он и обрезает, тут дело в другом. Если 384 (0x0180) преобразовать в char, получится -128 (0x80). Это значение и записывается в QByteArray. Далее при битовых операциях оно преобразуется в integer (0xffffff80) ну и так далее. Тут просто нужно понимать системы счисления и битовые операции...
0
04.04.2016, 11:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.04.2016, 11:38
Помогаю со студенческими работами здесь

Битовые последовательности и битовые операции
Вычислить сумму по модулю 2 всех бит в позициях, номер которых кратен 2^k. (1, 2, 4, 8, 16, 32). ...

Используя только битовые операции и операции арифметического сложения и вычитания, вычислите число
Даны числа x и y. Используя только битовые операции и операции арифметического сложения и...

Битовые операции и операции смещения языка С
Доброго времени суток господа,помогите пожалуйста.Есть 2 кода к задаче,первый работает...

Побитовые операции с QByteArray
У меня такой вопрос. Есть QByteArray array, пусть он будет равен 0x2345 Я хочу провести с ними...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru