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

Поля - C++

Восстановить пароль Регистрация
 
AlexTorrin
3 / 3 / 0
Регистрация: 07.05.2012
Сообщений: 27
11.05.2012, 17:14     Поля #1
Здравствуйте.
C++
1
2
3
4
5
6
7
8
9
10
struct sreg {
              unsigned enable : 1;
              unsigned page : 3;
              unsigned : 1;        // не используется
              unsigned mode : 2;
              unsigned : 4;        // не используется
              unsigned access : 1;
              unsigned length : 1;
              unsigned non_resident : 1;
        };
Не могли бы вы объяснить, что это? Код взят из книги Страуструпа.
Что такое структура и зачем она нужна я знаю, но что означает "поля"? И почему у одних "полей" названия есть у других нет? Причем здесь unsigned? И как это использовать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2012, 17:14     Поля
Посмотрите здесь:

C++ Неизменяемые поля
C++ Битовые поля
C++ Битовые поля
Битовые поля C++
C++ Битовые поля
C++ Поля битов
Поля MZ файла C++
Битовые поля C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
11.05.2012, 17:37     Поля #2
гугли "битовые поля".

как пример использования:

множество флагов (если прям ну ваще жалко памяти по 1 байту на каждый флаг),а так отдаем по 1 биту.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct data_t {
 
    unsigned flag1: 1;
    unsigned flag2: 1;
    unsigned flag3: 1;
 
    // ...
};
 
data_t d;
 
// ...
 
d.flag1 = 1;
d.flag2 = 0;
как другой пример, иногда удобно брать отдельные биты и пары битов из переменной.
в данном случае рассмотрим содержание в 1 объединении информации о старшем и младшем байте числа short (у меня оно 2-х байтное).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
union _SHORT {
 
    short var;
 
    struct {
 
        unsigned low: 8;
        unsigned high: 8;
 
    };
 
};
 
int main(int argc, char *argv[]) {
 
    _SHORT s;
    s.var = 0xFFFA;
 
    std::cout << std::hex << s.high << ' ' << s.low;
 
}
выведется "ff fa"
AlexTorrin
3 / 3 / 0
Регистрация: 07.05.2012
Сообщений: 27
11.05.2012, 17:42  [ТС]     Поля #3
OstapBender, Спасибо большое!
Yandex
Объявления
11.05.2012, 17:42     Поля
Ответ Создать тему
Опции темы

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