Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для no_wearines
56 / 52 / 21
Регистрация: 01.01.2012
Сообщений: 347

Сцепка флагов посредством побитового ИЛИ

12.02.2017, 20:42. Показов 833. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем.

Есть куча флагов:
C++
1
2
3
4
5
6
7
8
9
10
 enum fmt_flags 
{
      boolalpha   = 0x0001,
      dec           = 0x0002,
      fixed         = 0x0004,
      hex           = 0x0008,
      internal     = 0x0010,
      left           = 0x0020,
      oct           = 0x0040
};
Передаем их в функцию одним аргументом, посредством побитового 'или':
C++
1
    std::cout.flags( std::hex | std::fixed | std::internal );
Вопрос: как в методе flags мне определить какие флаги передал пользователь?

Я так полагаю надо использовать побитовое 'и' с маской, но какой маской?

Все написанное выше не является текущей задачей - это так произвольный текст. Можете привести пример со своими
значениями.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.02.2017, 20:42
Ответы с готовыми решениями:

Операция побитового исключающего ИЛИ
Ввести в консоли строку из пяти символов, а затем произвести над каждым символом операцию побитового исключающего ИЛИ (XOR – в C++ ^) со...

Процедуры: вычислить результат логического побитового исключающего Или
Помогите пожалуйста с такой задачей: Ввести два 16-битовых целых числа А и В. Вычислить результат логического побитового исключающего ИЛИ...

Определить, является ли число простым используя операцию побитового ИЛИ
Приветствую. Сделал обычное решето эратосфена, прошла на 80%, прошу вашей помощи Ограничение времени 1 секунда Ограничение...

3
Эксперт .NET
 Аватар для Rius
13157 / 7715 / 1679
Регистрация: 25.05.2015
Сообщений: 23,511
Записей в блоге: 14
12.02.2017, 20:46
C++
1
2
3
if ((value & std::hex) == std::hex) {
  ...
}
1
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
12.02.2017, 20:46
Цитата Сообщение от no_wearines Посмотреть сообщение
Я так полагаю надо использовать побитовое 'и' с маской, но какой маской?
Всё верно. Маска равна значению проверяемого флага. Например, если f & hex не равно нулю, то флаг hex установлен.
1
Эксперт .NET
 Аватар для Rius
13157 / 7715 / 1679
Регистрация: 25.05.2015
Сообщений: 23,511
Записей в блоге: 14
12.02.2017, 20:59
Ещё немного другой способ, может быть пригодится:
Кликните здесь для просмотра всего текста

header
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
#ifndef JSS_BITMASK_HPP
#define JSS_BITMASK_HPP
 
// (C) Copyright 2015 Just Software Solutions Ltd
//
// Distributed under the Boost Software License, Version 1.0.
//
// Boost Software License - Version 1.0 - August 17th, 2003
//
// Permission is hereby granted, free of charge, to any person or
// organization obtaining a copy of the software and accompanying
// documentation covered by this license (the "Software") to use,
// reproduce, display, distribute, execute, and transmit the
// Software, and to prepare derivative works of the Software, and
// to permit third-parties to whom the Software is furnished to
// do so, all subject to the following:
//
// The copyright notices in the Software and this entire
// statement, including the above license grant, this restriction
// and the following disclaimer, must be included in all copies
// of the Software, in whole or in part, and all derivative works
// of the Software, unless such copies or derivative works are
// solely in the form of machine-executable object code generated
// by a source language processor.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
// KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
// COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE
// LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN
// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
 
#include<type_traits>
 
template<typename E>
struct enable_bitmask_operators{
    static const bool enable=false;
};
 
template<typename E>
typename std::enable_if<enable_bitmask_operators<E>::enable,E>::type
operator|(E lhs,E rhs){
    typedef typename std::underlying_type<E>::type underlying;
    return static_cast<E>(
        static_cast<underlying>(lhs) | static_cast<underlying>(rhs));
}
 
template<typename E>
typename std::enable_if<enable_bitmask_operators<E>::enable,E>::type
operator&(E lhs,E rhs){
    typedef typename std::underlying_type<E>::type underlying;
    return static_cast<E>(
        static_cast<underlying>(lhs) & static_cast<underlying>(rhs));
}
 
template<typename E>
typename std::enable_if<enable_bitmask_operators<E>::enable,E>::type
operator^(E lhs,E rhs){
    typedef typename std::underlying_type<E>::type underlying;
    return static_cast<E>(
        static_cast<underlying>(lhs) ^ static_cast<underlying>(rhs));
}
 
template<typename E>
typename std::enable_if<enable_bitmask_operators<E>::enable,E>::type
operator~(E lhs){
    typedef typename std::underlying_type<E>::type underlying;
    return static_cast<E>(
        ~static_cast<underlying>(lhs));
}
 
template<typename E>
typename std::enable_if<enable_bitmask_operators<E>::enable,E&>::type
operator|=(E& lhs,E rhs){
    typedef typename std::underlying_type<E>::type underlying;
    lhs=static_cast<E>(
        static_cast<underlying>(lhs) | static_cast<underlying>(rhs));
    return lhs;
}
 
template<typename E>
typename std::enable_if<enable_bitmask_operators<E>::enable,E&>::type
operator&=(E& lhs,E rhs){
    typedef typename std::underlying_type<E>::type underlying;
    lhs=static_cast<E>(
        static_cast<underlying>(lhs) & static_cast<underlying>(rhs));
    return lhs;
}
 
template<typename E>
typename std::enable_if<enable_bitmask_operators<E>::enable,E&>::type
operator^=(E& lhs,E rhs){
    typedef typename std::underlying_type<E>::type underlying;
    lhs=static_cast<E>(
        static_cast<underlying>(lhs) ^ static_cast<underlying>(rhs));
    return lhs;
}
 
#endif
header
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
enum class AlignMode {
    None = 0x00,
    Top = 0x01,
    Bottom = 0x02,
    Left = 0x04,
    Right = 0x08,
    VCenter = 0x10,
    HCenter = 0x20,
    Center = 0x30
};
 
template<>
struct enable_bitmask_operators<AlignMode> {
    static const bool enable = true;
};
source
C++
1
2
3
4
5
AlignMode alignmode;
...
if ((alignmode & AlignMode::HCenter) != AlignMode::None) {
  ...
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.02.2017, 20:59
Помогаю со студенческими работами здесь

Ввести два 16-битовых целых числа А и В. Вычислить результат логического побитового исключающего ИЛИ чисел 10*
Помогите найти ошибку. Все компилируется, но при запуске вылетает с ошибкой. model small outmsg macro msg ; macros dlya vivoda na ekran...

Как с помощью манипуляторов (или флагов форматирования) найти количество знаков после запятой?
#include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; int main() { float g = 10.53446; printf(&quot;%.4f\n&quot;, g); ...

Можно ли через ардуино по USB посредством кнопки или сенсора включить или выключить монитор компютера?
Можно ли через ардуино по USB при помощи кнопки или сенсора включить или выключить монитор компютера?

Сцепка слов по столбцам
Добрый вечер господа Есть такой макрос (файл приложил). Он сцепляет слова между собой. Но делает он это немного не так как нужно. Он...

Сцепка текстовых ячеек с переменной
Всем привет! Есть задача: в столбцах А, В, С есть текст, назовем его постоянным. В столбцах D, E, F, G - переменный текст. Необходимо в...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru