Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
62 / 1 / 0
Регистрация: 30.11.2021
Сообщений: 31

Код писать на языке С++ с использованием битовых операций

25.06.2022, 04:53. Показов 464. Ответов 2

Студворк — интернет-сервис помощи студентам
Код писать на языке С++ с использованием битовых операций.
Про битовые операции: http://mycpp.ru/cpp/book/c04_11.html
https://neerc.ifmo.ru/wiki/ind... 0%B8%D0%B8
Для хранения и отображения можете использовать bitset - https://en.cppreference.com/w/... set/bitset, https://en.cppreference.com/w/... t/to_ulong


Информация об интернет-магазине зашифрована беззнаковым целым числом F ϵ N, в двоичном представлении которого биты с 8 по 15 содержат идентификационный номер магазина, а младшие восемь битов сопоставлены с набором атрибутов:


По заданному F определить: номер интернет-магазина (в десятичной форме), наличие круглосуточной обратной связи и возможности предзаказа (одновременно) ИЛИ наличие бонусной программы и распродажи (по отдельности).
Миниатюры
Код писать на языке С++ с использованием битовых операций  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.06.2022, 04:53
Ответы с готовыми решениями:

Реализовать длинную арифметику с использованием битовых операций и больших чисел
Всем привет. Возникла задача реализовать длинную арифметику с использованием битовых операций и больших чисел, то есть представлять число...

я не могу писать код на языке С в Visual Studio
Для работы на языке С я инструктировался по этому видео lOsKtgPrPg4 Но проблема в том, что я вообще не могу кодить из-за этой...

Разработать программу на языке Си с использованием операций языка Си и функций стандартной математической библиотеки
Разработать программу на языке Си с использованием операций языка Си и функций стандартной математической библиотеки. Значение переменной х...

2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38157 / 21093 / 4305
Регистрация: 12.02.2012
Сообщений: 34,675
Записей в блоге: 14
25.06.2022, 06:24
C++
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
          unsigned short int f=...;  // информация о магазине
    
          int num = (f & 0xff00) >> 8;
          cout << "Номер магазина=" << num << endl;
 
          if (f & 1)
            cout << "Бонусная программа есть" << endl;
          else
            cout << "Бонусной программы нет" << endl; 
 
          if (f & 2)
            cout << "Распродажа есть" << endl;
          else
            cout << "Распродажа нет" << endl; 
 
          if (f & 4)
            cout << "Минимальная сумма заказа есть" << endl;
          else
            cout << "Минимальная сумма заказа нет" << endl; 
 
          if (f & 8)
            cout << "Возможность предзаказа есть" << endl;
          else
            cout << "Возможности предзаказа нет" << endl; 
 
          // и т.д.
1
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
25.06.2022, 09:39
Можно создать класс, в котором все эти битовые операции обернуть для удобства в методы.

Проверьте тщательно -- я люблю опечататься, когда копипащу кучу ненужного барахла.
C++
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
#include <iostream>
#include <bitset>
 
// функция получения бита номер n
constexpr bool getBit(std::uint16_t number, std::uint8_t n) {
    return number & (std::uint16_t(1) << n);
}
 
// функция установки бита n в значение value
constexpr std::uint16_t setBit(std::uint16_t number, std::uint16_t value, std::uint8_t n) {
    return number ^ ((-value ^ number) & (std::uint16_t(1) << n));
}
 
// этот класс демонстрирует работу с битовми операциями
class Shop {
public:
 
    // для ясности можно создать энум
    enum Property {
        BONUS = 0,
        SALES = 1,
        MINSUM = 2,
        FILTERS = 3,
        PREORDER = 4,
        SUPPORT = 5,
        DELIVERY = 6,
        NIGHT = 7
    };
 
    constexpr Shop(std::uint16_t asInteger) : info{asInteger} {}
 
    constexpr Shop() : info{0} {}
 
    constexpr std::uint16_t asInteger() const {
        return info;
    }
 
    constexpr int getId() const {
        return info >> 8;
    }
 
    void setId(std::uint8_t id) {
        info = info & 255 | (id << 8);
    }
 
    constexpr bool getBonus() const {
        return getBit(info, BONUS);
    }
 
    void setBonus(bool value) {
        info = setBit(info, value ? 1 : 0, BONUS);
    }
 
    constexpr bool getSales() const {
        return getBit(info, SALES);
    }
 
    void setSales(bool value) {
        info = setBit(info, value ? 1 : 0, SALES);
    }
 
    constexpr bool getMinsum() const {
        return getBit(info, MINSUM);
    }
 
    void setMinsum(bool value) {
        info = setBit(info, value ? 1 : 0, MINSUM);
    }
 
    constexpr bool getFilters() const {
        return getBit(info, FILTERS);
    }
 
    void setFilters(bool value) {
        info = setBit(info, value ? 1 : 0, FILTERS);
    }
 
    constexpr bool getPreorder() const {
        return getBit(info, PREORDER);
    }
 
    void setPreorder(bool value) {
        info = setBit(info, value ? 1 : 0, PREORDER);
    }
 
    constexpr bool getSupport() const {
        return getBit(info, SUPPORT);
    }
 
    void setSupport(bool value) {
        info = setBit(info, value ? 1 : 0, SUPPORT);
    }
 
    constexpr bool getDelivery() const {
        return getBit(info, DELIVERY);
    }
 
    void setDelivery(bool value) {
        info = setBit(info, value ? 1 : 0, DELIVERY);
    }
 
    constexpr bool getNight() const {
        return getBit(info, NIGHT);
    }
 
    void setNight(bool value) {
        info = setBit(info, value ? 1 : 0, NIGHT);
    }
 
    // с этого места более продвинутый пример -- доступ через оператор []
    // как на чтение, так и на запись
    // так можно убрать 75 строк геттеров и сеттеров и обеспечить, например,
    // проход по всем свойствам в цикле.
    struct BitOp {
        std::uint16_t &number;
        std::uint8_t n;
 
        constexpr BitOp(std::uint16_t &number, std::uint8_t n) : number(number), n(n) {}
 
        constexpr operator bool() const { return getBit(number, n); }
 
        BitOp &operator=(bool value) {
            number = setBit(number, value ? 1 : 0, n);
            return *this;
        }
    };
 
    // то же самое в неизменяемом, константном, контексте
    struct ConstBitOp {
        const std::uint16_t &number;
        std::uint8_t n;
 
        constexpr ConstBitOp(const std::uint16_t &number, std::uint8_t n) : number(number), n(n) {}
 
        constexpr operator bool() const { return getBit(number, n); }
    };
 
    // оператор доступа по индексу
    BitOp operator[](const Property &property) {
        return BitOp(info, static_cast<std::uint8_t>(property));
    }
 
    // то же самое в неизменяемом, константном, контексте
    constexpr ConstBitOp operator[](const Property &property) const {
        return ConstBitOp(info, static_cast<std::uint8_t>(property));
    }
 
private:
    std::uint16_t info; // числовое значение
};
 
// демонстрация работы с битовыми полями
// оператор вывода
std::ostream &operator<<(std::ostream &out, const Shop &info) {
    return out << std::boolalpha << "Shop{"
               << "id: " << +info.getId() << ", "
               << "bonus: " << info.getBonus() << ", "
               << "sales: " << info.getSales() << ", "
               << "minsum: " << info.getMinsum() << ", "
               << "filters: " << info.getFilters() << ", "
               << "preorder: " << info.getPreorder() << ", "
               << "support: " << info.getSupport() << ", "
               << "delivery: " << info.getDelivery() << ", "
               << "night: " << info.getNight() << ", "
               << "bitset: " << std::bitset<16>(info.asInteger()) << "}";
}
 
 
int main() {
    // класс магазина
    Shop shop(0xFF0F);
 
    // использование оператора доступа по индексу
    std::cout << "Was: " << std::boolalpha << shop[Shop::NIGHT] << std::endl;
    shop[Shop::NIGHT] = true;
    std::cout << "Now: " << std::boolalpha << shop[Shop::NIGHT] << std::endl;
 
    // демонстрация доступа к битам числа через методы класса
    std::cout << shop << std::endl;
 
    return 0;
}
Без кучи геттеров и сеттеров
C++
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <iostream>
#include <bitset>
 
// функция получения бита номер n
constexpr bool getBit(std::uint16_t number, std::uint8_t n) {
    return number & (std::uint16_t(1) << n);
}
 
// функция установки бита n в значение value
constexpr std::uint16_t setBit(std::uint16_t number, std::uint16_t value, std::uint8_t n) {
    return number ^ ((-value ^ number) & (std::uint16_t(1) << n));
}
 
// этот класс демонстрирует работу с битовми операциями
class Shop {
public:
 
    // для ясности можно создать энум
    enum Property {
        BONUS = 0,
        SALES = 1,
        MINSUM = 2,
        FILTERS = 3,
        PREORDER = 4,
        SUPPORT = 5,
        DELIVERY = 6,
        NIGHT = 7
    };
 
    constexpr Shop(std::uint16_t asInteger) : info{asInteger} {}
 
    constexpr Shop() : info{0} {}
 
    constexpr std::uint16_t asInteger() const {
        return info;
    }
 
    constexpr int getId() const {
        return info >> 8;
    }
 
    // доступ через оператор []
    // как на чтение, так и на запись
    // максимум кода, минимум толка, просто красиво
    struct BitOp {
        std::uint16_t &number;
        std::uint8_t n;
 
        constexpr BitOp(std::uint16_t &number, std::uint8_t n) : number(number), n(n) {}
 
        constexpr operator bool() const { return getBit(number, n); }
 
        BitOp &operator=(bool value) {
            number = setBit(number, value ? 1 : 0, n);
            return *this;
        }
    };
 
    // то же самое в неизменяемом, константном, контексте
    struct ConstBitOp {
        const std::uint16_t &number;
        std::uint8_t n;
 
        constexpr ConstBitOp(const std::uint16_t &number, std::uint8_t n) : number(number), n(n) {}
 
        constexpr ConstBitOp(BitOp &other) : number(other.number), n(other.n) {}
 
        constexpr operator bool() const { return getBit(number, n); }
    };
 
    // оператор доступа по индексу
    BitOp operator[](const Property &property) {
        return BitOp(info, static_cast<std::uint8_t>(property));
    }
 
    // то же самое в неизменяемом, константном, контексте
    constexpr ConstBitOp operator[](const Property &property) const {
        return ConstBitOp(info, static_cast<std::uint8_t>(property));
    }
 
private:
    std::uint16_t info; // числовое значение
};
 
// демонстрация работы с битовыми полями
// оператор вывода
std::ostream &operator<<(std::ostream &out, const Shop &info) {
    return out << std::boolalpha << "Shop{"
               << "id: " << +info.getId() << ", "
               << "bonus: " << info[Shop::BONUS] << ", "
               << "sales: " << info[Shop::SALES] << ", "
               << "minsum: " << info[Shop::MINSUM] << ", "
               << "filters: " << info[Shop::FILTERS] << ", "
               << "preorder: " << info[Shop::PREORDER] << ", "
               << "support: " << info[Shop::SUPPORT] << ", "
               << "delivery: " << info[Shop::DELIVERY] << ", "
               << "night: " << info[Shop::NIGHT] << ", "
               << "bitset: " << std::bitset<16>(info.asInteger()) << "}";
}
 
 
int main() {
    // класс магазина
    Shop shop(0xFF0F);
 
    // использование оператора доступа по индексу
    std::cout << "Was: " << std::boolalpha << shop[Shop::NIGHT] << std::endl;
    shop[Shop::NIGHT] = true;
    std::cout << "Now: " << std::boolalpha << shop[Shop::NIGHT] << std::endl;
 
    // демонстрация доступа к битам числа через методы класса
    std::cout << shop << std::endl;
 
    return 0;
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.06.2022, 09:39
Помогаю со студенческими работами здесь

Как начать писать код на языке 1C и что можно написать?
Так как 1С широко распространяется, решил, что его стоит изучить. Немного полазив в конфигураторе 1С: предприятие и почитав о нём, у меня...

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

Применение битовых операций
Когда нужно применять битовые операции? Как они работают разобрался, но когда применять - нет В различных статьях пишут что они...

Применение битовых операций
Применение битовых операций: задачу решить, не используя арифметических операций +, , *, /, %. Написать программу, которая позволит ввести...

Реализация битовых операций в Си++
По теме: Реализация битовых операций в Си++. Даны два неравных числа: n и m, не превосходящие 31. Вычислите 2^n+2^m.


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru