- через имя ( оператор "точка" ) ,
- через указатель ( оператор -> ) .
Указание количества бит члена, относящегося к битовым, производится через двоеточие после имени члена:
┌─────────────────────────────────────┐
│ struct Ярлык {
│ . . .
│ Тип Имя : Длина;
│ . . .
│ };
└─────────────────────────────────────┘
Битовый член структуры может не иметь имени, а только тип и длину.
К подобному безымянному члену битового поля нет доступа, но можно попробовать исхитриться получить доступ через указатель на соседние элементы (но не как обычно - имени-то нет!). Где это можно применить, не знаю.
┌──────────────────────────────────────────────┐
Структуру с битовыми полями можно инициализировать при создании объекта. └──────────────────────────────────────────────┘
Инициализация выполняется обычным образом:
Ярлык Объект = {Список значений инициализации}│;│
, где Ярлык - Имя структуры,
Объект - Имя создаваемого объекта.
Не забывайте про ;
На битовый член структуры накладываются следующие ограничения:
- Тип битового члена может быть только: -int, - signed, - unsigned.
- Одноразрядный битовый член может быть только unsigned.
- Битовое поле не может иметь длину более, чем длина типа int.
- Внимание! Для разных компьютеров и трансляторов знаковый разряд может быть левым или правым.
В ВС3.1 знаковый разряд - правый, следующий за старшим
(для справки: самый младший разряд - левый).
- Нельзя получить адрес переменной битового поля.
- Из переменных битового поля нельзя формировать массивы (но из объектов с битовыми полями - можно).
- Коды, использующие битовые поля зависят от компьютера:
- знак числа слева - справа;
- младший разряд слева - справа.
Могут существовать смешанные структуры с обычными переменными и битовыми полями.
┌───────── ───────────┐
│ Для битовых полей оптимизация расположения элементов структур в памяти
│ выполняется только для элементов, расположенных подряд в пределах, ог-
│ раниченных длиной, занимаемой одним словом целочисленного типа. │
└───────── ───────────┘
Можно предложить исследование ещё множества интересностей и необычностей в исследовании вопросов битовых полей:
- построение вложенных структур;
- исследование возможностей операций с битовыми переменными:
- выходы за границы диапазона,
- логические операции ...
- игра с указателями;
И множество других, но попробуйте сами. Если я буду всё это рассматривать в
ПИ++, то я могу его не закончить никогда!
Единственное, что я могу вам предложить - это при возникновении какой-либо необходимости смело спрашивать компьютер. Он вам всегда подскажет - это не Зоя Космодемьянская!
* * *
┌──────────────────────────────┐ t0000136
│ Создание псевдонимов типам │
└──────────────────────────────┘
В С++ имеется возможность давать именам уже известных типов данных, как базовых, так и пользовательских, новые имена - псевдонимы.
При этом новые и старые имена становятся ТОЖДЕСТВЕННЫМИ. Объявленные объекты и переменные транслятор считает однотипными.
Для того, чтобы дать типу данных псевдоним, следует выполнить:
┌───────────────────────────────────────────┐
│ typedef Имя_типа_данных Новое_имя_типа; │
└───────────────────────────────────────────┘
где typedef - ключевое слово-оператор, указывающее на операцию создания псевдонима для известного типа данных;
Имя_типа_данных - старое имя типа данных;
Новое_имя_типа - просто гладиолус.
Для оправдания применения оператора typedef говорят, что его применяют для облегчения создания машинно-независимых программ. Мол, для перехода на другую платформу достаточно поменять только строку с typedef. Но я не слышал, чтобы базовые типы в С++ назывались как-то по-другому. То ли они сказали тихо, то ли тихо сказали.
Применение typedef для более сложных типов такое же, но не понятно зачем.
* * *
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.