Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
rk8673
0 / 0 / 0
Регистрация: 19.03.2016
Сообщений: 4
29.06.2016, 10:28     Как сделать тип enum в структуре беззнаковым #1
Почему элемент 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
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5956 / 5561 / 1788
Регистрация: 18.12.2011
Сообщений: 14,215
Завершенные тесты: 1
29.06.2016, 10:42     Как сделать тип enum в структуре беззнаковым #2
C++
1
2
3
4
5
struct BracketBlock
{
    unsigned   Number:6;
    unsigned   Type:2;   
};
ct0r
C++/Haskell
 Аватар для ct0r
1550 / 569 / 39
Регистрация: 19.08.2012
Сообщений: 1,174
Завершенные тесты: 1
29.06.2016, 10:43     Как сделать тип enum в структуре беззнаковым #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от rk8673 Посмотреть сообщение
Почему элемент Type структуры BracketBlock signed
Потому что это implementation defined, и раз у тебя -2, то это признак винды и студии какой-нибудь
Явно underlying тип можно указать так например:
C++
1
enum BracketType : uint8_t
rk8673
0 / 0 / 0
Регистрация: 19.03.2016
Сообщений: 4
29.06.2016, 11:48  [ТС]     Как сделать тип enum в структуре беззнаковым #4
В первом случае все заработало, но хотелось, что бы тип BracketType был указан.
Во втором тоже работает, но с ограничением. В cout нужно приводить тип к (int), иначе ошибка.
Я указал вместо
C++
1
enum BracketType : uint8_t
это
C++
1
enum BracketType : unsigned
и все заработало как надо.

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

ЗЫ Неужели это из-за
Цитата Сообщение от ct0r Посмотреть сообщение
это признак винды и студии какой-нибудь
DrOffset
6462 / 3836 / 887
Регистрация: 30.01.2014
Сообщений: 6,631
29.06.2016, 13:03     Как сделать тип enum в структуре беззнаковым #5
Цитата Сообщение от rk8673 Посмотреть сообщение
Неужели это из-за
Нет, это из-за
Цитата Сообщение от ct0r Посмотреть сообщение
implementation defined
Yandex
Объявления
29.06.2016, 13:03     Как сделать тип enum в структуре беззнаковым
Ответ Создать тему
Опции темы

Текущее время: 17:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru