Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
11 / 11 / 1
Регистрация: 14.07.2014
Сообщений: 186

Наличие бита в байте

13.11.2014, 11:29. Показов 3036. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, правильна ли реализация проверки наличия бита в байте

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
#define MARK 0x02
..
if (dataRead[1] & MARK)
            {
                ui->labelMARK->setText("включено");
            }
            else
            {
                ui->labelMARK->setText("выключено");
            }
не совсем корректно работает..
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.11.2014, 11:29
Ответы с готовыми решениями:

Как проверить наличие бита в байте
Здравствуйте!! Собственно вопрос, можно ли как нибудь записать условие if на проверку бита в байте(D0 D1 D2 D3 D4 D5 D6 D7)?? Смысл в...

Сканирование с младшого до старшего бита на наличие 1
Привет всем. Нужна помощь. Есть задание: Задано число А. Мне нужно сделать сканирование с младшого до старшего бита на наличие 1. А тепер...

Создать 2 переменные, одна из которых хранит 2 старших бита исходного числа, другая 2 младших бита этого числа
Дано число. Создать 2 переменные, одна из которых хранит 2 старших бита исходного числа, другая 2 младших бита этого числа. код частично...

23
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
13.11.2014, 13:04
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Я утверждаю лишь то, что & проверяет одинаковость всех битов, установленных в 1, у проверяемого значения с исходными и только если они все совпадут - тогда результат этой операции будет true
Цитата Сообщение от _Ivana Посмотреть сообщение
Сверим их с общественностью, так сказать
Проверяется же просто
C++
1
2
3
4
5
6
7
8
9
int main() 
{
    unsigned A = (1 << 1) | (1 << 23); 
    unsigned B = (1 << 23);
    
    std::cout << std::boolalpha << bool(A & B) << std::endl;
    
    return 0;
}
Достаточно, чтоб хотябы один бит совпал (т.е. результат операции != 0)
0
Заблокирован
13.11.2014, 13:10
Цитата Сообщение от taras atavin Посмотреть сообщение
Чего?
Ну вы чё ребят?
Для проверки одного бита этого достаточно:
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
if (dataRead[1] & MARK)
Если б MARK был бы с множеством выставленных битов, которые надо проверить, тогда надо было бы так:
C++
1
if ((dataRead[1] & MARK) == MARK)
Всё, обсуждать тут больше не чего
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
13.11.2014, 13:26
Значит есть чего. Все биты в байте есть всегда и проверять здесь нечего.
0
11 / 11 / 1
Регистрация: 14.07.2014
Сообщений: 186
13.11.2014, 13:35  [ТС]
Отрадно, что сразу столько людей откликнулось на мою просьбу.
Вчера я задавал этот вопрос и как кто-то заметил, что мне действительно все разжевали и орально положили..
Но вот как оказалось своего я все-таки не добился, в той теме писать не стал ибо там никто не отвечает, поэтому эгоистично создал эту тему..
Смысл такой, что как я уже писал, читаю посыл с ком порта:

C++ (Qt)
1
2
    QByteArray dataRead;
    dataRead = port->readAll();
читаю все что входит..
сначала идет проверка на поступление двух первых байт, в случае если они поступили в ответ направляет байт наличия синхронизации, после этого идет проверка поступившего байта (D0 D1 D2 D3 D4 D5 D6 D7), так вот значение каждого бита в этом байте включение и выключение соответствующих опций.
В моем вопросе я представил отрывок где проверяется наличие именно бита 0x02 (D6).
Чуть больше кода:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#define GATE 0x01     
#define MARK 0x02       
#define APERTUREON 0x04  
#define APERTUREOFF 0x08
#define FIELDOFVIEW 0x10 
#define SERIESON 0x20    
#define SERIESOFF 0x40   
#define SINGLE 0x80     
 
//Отображение поступлений в виде HEX
    QByteArray hexDataRead (QByteArray(dataRead.toHex()));
    QString text_out;
    text_out.resize(5 * hexDataRead.size());
    if (hexDataRead.size() >= 2)
        text_out = QString("0x") + hexDataRead.mid(0, 2);
    for (int i = 2; i < hexDataRead.size(); i += 2)
    {
        text_out.append(" 0x");
        text_out.append(hexDataRead.mid(i, 2));
    }
    ui->textEdit->setText(text_out);
 
//Проверка приема A1 и A2 (Установление соединения)
    if (Connect!=true)
    {
    if (dataRead [0] & 0x07 && dataRead [1] & 0x80)
    {
        qDebug ("Соединение с ПК установлено (A1,A2)");
        ui->statusBar->showMessage(tr("Соединение с ПК установлено"));
        Connect = true;
        return;
    }
    }
    else
    {
        B1Send();
        if (dataRead[0] & 0x07)
        {
            if (dataRead[1] & GATE)
                ui->labelGATE->setText("Включен");
            else
                ui->labelGATE->setText("Выключен");
 
            if (dataRead[1] & MARK)
                ui->labelMARK->setText("Включен");
            else
                ui->labelMARK->setText("Выключен");
 
            if (dataRead[1] & APERTUREON)
                ui->labelAPERTUREON->setText("Включен");
            else
                ui->labelAPERTUREON->setText("Выключен");
 
            if (dataRead[1] & APERTUREOFF)
                ui->labelAPERTUREOFF->setText("Включен");
            else
                ui->labelAPERTUREOFF->setText("Выключен");
 
            if (dataRead[1] & FIELDOFVIEW)
                ui->labelFIELDOFVIEW->setText("Включен");
            else
                ui->labelFIELDOFVIEW->setText("Выключен");
 
            if (dataRead[1] & SERIESON)
                ui->labelSERIESON->setText("Включен");
            else
                ui->labelSERIESON->setText("Выключен");
 
            if (dataRead[1] & SERIESOFF)
                ui->labelSERIESOFF->setText("Включен");
            else
                ui->labelSERIESOFF->setText("Выключен");
 
            if (dataRead[1] & SINGLE)
                ui->labelSINGLE->setText("Включен");
            else
                ui->labelSINGLE->setText("Выключен");
 
            }
    }
 
    dataRead.clear();
    hexDataRead.clear();
}
смысл в том, что при посыле в эту программу байта где например по адресу 0x02 стоит 1
при проверке выдает "Выключен" и потом сразу "Включен".

Добавлено через 19 секунд
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.11.2014, 13:35

Извлечь 3 бита числа A, начиная со второго и вставить их в число B, начиная с первого бита
Ввести целое A. Извлечь 3 бита числа A, начиная со второго и вставить их в число B, начиная с ервогоп бита. B=1A05h.

Написать функцию целого типа, определяющую наличие в первой строке матрицы наличие седловой точки.
ребят нужна помощь Задачи по программированию. Задача решается на двух языках. Задача 4. Написать функцию целого типа,...

Реверс битов в байте
Реализую реверс битов в байте. На форуме есть темы об этом. Нашел одну. Прекрасный код, который работает. Но хотелось бы узнать как он...

Проверка битов в байте
Добрый день ) Есть функция которая возвращает массив байт, нужно в этом массиве выбрать определённый байт и проверить эго Что значит...

Инвентировать биты в байте
Народ помогите пожалуйста как инвентировать биты в байте


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru