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

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

13.11.2014, 11:29. Показов 2941. Ответов 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 / 1796 / 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
Ответ Создать тему
Новые блоги и статьи
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru