- •Вопрос1)Общая структура программы на языке Си.
- •1.Внутреннее представление данных в оперативной памяти;
- •2.Совокупность значений (диапазон), которые могут принимать данные этого типа;
- •3.Набор операций, которые допустимы над такими данными.
- •Вопрос2)Константы в программах
- •Вопрос3)Операции, выражения
- •Вопрос 4
- •Вопрос 5
- •Вопрос 6 Общая структура программы на языке Си.
- •Вопрос 7
- •Вопрос 8 Арифметические операции
- •Вопрос 9
- •Вопрос 10
- •If (выражение) оператор;
- •If (выражение) оператор 1 ;
- •If (выражение 1) оператор 1;
- •If (выражение 2) оператор 2;
- •If (выражение 3) оператор 3;
- •Вопрос 11
- •Вопрос 12
- •Вопрос 13
- •Вопрос 14
- •Вопрос 15
- •Вопрос 16
- •Вопрос 17
- •Вопрос 19 Операция sizeof
- •Вопрос 20
- •Вопрос 21
- •Вопрос 22 Связь указателей и массивов.
- •Вопрос 23
- •Вопрос 24
- •Вопрос 25 Массивы структур
- •Вопрос 26
- •Вопрос 27
- •Вопрос 28
- •Вопрос 29
- •Вопрос 30
- •Вопрос 31
- •Закрытие файла
- •Вопрос 32
- •Вопрос 33 Вложенные структуры
- •Вопрос 34 Массивы структур
- •Вопрос 35 Размещение структурных переменных в памяти
- •Вопрос 36
- •Вопрос 37
- •Вопрос 38
- •Вопрос 39
Вопрос 39
Битовые поля
Наряду с "обычными" типами, допустимыми и для "отдельных" переменных, поля структуры могут иметь особый целочисленный тип, допустимый только для них - битовые поля.
Битовые поля содержат заданное количество бит, необязательно кратное байту, но не превосходящее количество бит в типе int (в С++ Builder'е - 32). Они могут быть знаковыми (по умолчанию - signed) либо беззнаковыми (unsigned) , причем слово signed обычно опускается. В знаковых полях старший бит означает знак числа, аналогично всем целочисленным типам (см. выше тему "Кодирование целых чисел").
Объявление знакового битового поля имеет вид:
int a:размер;
а беззнакового битового поля:
unsigned b:размер;
где размер - количество бит в поле.
Пример:
struct T {
int a:5, b:4;
unsigned c:5;
float d;
unsigned e:2, f:5;
};
Выравнивание, рассмотренное выше, выполняется не для отдельных битовых полей, а только для совокупностей подряд идущих битовых полей (именно поэтому битовые поля применяются лишь в составе структур). Так, в приведенном примере битовые поля a, b и c располагаются в памяти подряд, занимая вместе одну двухбайтовую ячейку, как показано на схеме:
№ бит |
15 14 |
13 12 11 10 9 |
8 7 6 5 |
4 3 2 1 0 |
Поля |
|
c |
b |
a |
Как видно из рисунка, поля располагаются в ячейке от младших бит к старшим; при этом в примере последние 2 бита остались неиспользованными.
Аналогично, поля e и f занимают однобайтовую ячейку:
№ бит |
7 |
6 5 4 3 2 |
1 0 |
Поля |
|
f |
e |
Если размер объединенной ячейки превысил бы размер типа int, компилятор может разбить ее на отдельные меньшие ячейки.
Общая схема распределения памяти под структуру типа Т:
№ байт |
0 1 |
2 3 4 5 |
6 |
Поля |
a,b,c |
d |
e,f |
Заметим, что адрес отдельного битового поля получить невозможно.
Битовые поля позволяют:
1)уменьшить размер памяти, отводимой под переменную. В примере поля a,b,c,e,f в сумме заняли лишь 3 байта;
2)они упрощают доступ к отдельным битам какой-либо ячейки. Например, если структура с битовыми полями сама является полем объединения (см. ниже), такие поля дают прямой доступ к отдельным битам других полей объединения.