0 / 0 / 0
Регистрация: 19.03.2016
Сообщений: 6
1

Как сделать тип enum в структуре беззнаковым

29.06.2016, 10:28. Показов 3004. Ответов 4
Метки нет (Все метки)

Почему элемент Type структуры BracketBlock signed и как его сделать unsigned, не увеличивая количество бит Type?
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
enum BracketType
{
    NONE    = 0,
    OPEN    = 1,
    CLOSE   = 2
};
 
struct BracketBlock
{
    unsigned char   Number:6;
    BracketType     Type:2;     // сейчас -2, -1, 0, 1  ; нужно 0, 1, 2, 3  
};
 
int main()
{
    BracketType bt;
    bt = CLOSE;
    cout << bt << endl;
 
    BracketBlock a, b;
    a.Type = OPEN;
    b.Type = CLOSE;
    cout << OPEN << "\t" << a.Type << endl << CLOSE << "\t" << b.Type << endl;
}
В консоли:
2
1 1
2 -2
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.06.2016, 10:28
Ответы с готовыми решениями:

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

Сделать char беззнаковым
Какой директивой сказать компилятору, чтобы он считал тип char по умолчанию как unsigned? Надо для...

Keil (enum в структуре)
создаю переменную типа enum. создаю структуру с переменными. Если поместить enum внуть...

Как затолкать Vb тип Enum в Lotus Script
Как затолкать VB тип ENum в Lotus Script а еще VB Byte - это что, String*1 (в R5)

4
Модератор
Эксперт С++
12453 / 10015 / 6027
Регистрация: 18.12.2011
Сообщений: 26,813
29.06.2016, 10:42 2
C++
1
2
3
4
5
struct BracketBlock
{
    unsigned   Number:6;
    unsigned   Type:2;   
};
1
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
29.06.2016, 10:43 3
Лучший ответ Сообщение было отмечено Kastaneda как решение

Решение

Цитата Сообщение от rk8673 Посмотреть сообщение
Почему элемент Type структуры BracketBlock signed
Потому что это implementation defined, и раз у тебя -2, то это признак винды и студии какой-нибудь
Явно underlying тип можно указать так например:
C++
1
enum BracketType : uint8_t
1
0 / 0 / 0
Регистрация: 19.03.2016
Сообщений: 6
29.06.2016, 11:48  [ТС] 4
В первом случае все заработало, но хотелось, что бы тип BracketType был указан.
Во втором тоже работает, но с ограничением. В cout нужно приводить тип к (int), иначе ошибка.
Я указал вместо
C++
1
enum BracketType : uint8_t
это
C++
1
enum BracketType : unsigned
и все заработало как надо.

Всем большое спасибо. Выручили.

ЗЫ Неужели это из-за
Цитата Сообщение от ct0r Посмотреть сообщение
это признак винды и студии какой-нибудь
0
16272 / 8831 / 2166
Регистрация: 30.01.2014
Сообщений: 15,258
29.06.2016, 13:03 5
Цитата Сообщение от rk8673 Посмотреть сообщение
Неужели это из-за
Нет, это из-за
Цитата Сообщение от ct0r Посмотреть сообщение
implementation defined
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2016, 13:03
Помогаю со студенческими работами здесь

Как результат функции конвертировать в тип Enum?
Кто может подсказать как мне результат функции конвертировать в тип Enum, тоесть чтобы результат...

Добавить свой тип (Enum) в тип переменной My.Settings
Доброй ночи! В принципе название темы говорит само за себя. Нужен параметр приложения с моим типом...

Enum forward declaration - как достать базовый тип?
Доброго времени суток. Есть *.h файл, в котором нужно сделать forward declaration enum (не enum...

Как избавиться от необходимости явно указывать тип в enum?
Как сделать, чтобы для перечислений не нужно было явно указывать тип int? switch (direction) ...

Как преобразовать тип строку к типу перечисления строк enum?
=&gt; \d members Tabela &quot;public.members&quot; Kolumna | Typ | ...

Тип Enum
Вот табличка как тут правильно использовать, доклад будет опубликован enum тоесть нужно да либо...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru