- •6 Глава 1
- •12 Глава 1
- •14 Глава 1
- •16 Глава 1
- •18 Глава 1
- •20 Глава 1
- •22 Глава 1
- •24 Глава 1
- •26 Глава 1
- •31 Глава 1
- •34 Глава 2
- •36 Глава 2
- •Puc. 2.4. Дополнительные опции консольного приложения Win32
- •38 Глава 2
- •40 Глава 2
- •42 Глава 2
- •44 Глава 2
- •48 Глава 2
- •50 Глава 2
- •52 Глава 2
- •54 Глава 2
- •56 Глава 2
- •58 Глава 2
- •60 Глава 2
- •62 Глава 2
- •64 Глава 2
- •66 Глава 2
- •68 Глава 2
- •70 Глава 2
- •74 Глава 2
- •76 Глава 2
- •79 Глава 2
- •82 Глава 2
- •84 Глава 2
- •86 Глава 2
- •88 Глава 2
- •92 Глава 2
- •94 Глава 2
- •96 Глава 2
- •98 Глава 2
- •103 Глава 2
- •105 Глава 2
- •107 Глава 2
- •110 Глава 2
- •115 Глава 3
- •119 Глава 3
- •121 Глава 3
- •123 Глава 3
- •125 Глава 3
- •129 Глава 3
- •131 Глава 3
- •133 Глава 3
- •139 Глава 3
- •141 Глава 3
- •143 Глава 3
- •145 Глава 3
- •148 Глава 3
- •150 Глава 3
- •155 Глава 3
- •165 Глава 4
- •168 Глава 4
- •170 Глава 4
- •173 Глава 4
- •175 Глава 4
- •178 Глава 4
- •184 Глава 4
- •186 Глава 4
- •188 Глава 4
- •190 Глава 4
- •192 Глава 4
- •194 Глава 4
- •198 Глава 4
- •201 Глава 5
- •203 Глава 5
- •205 Глава 5
- •207 Глава 5
- •213 Глава 5
- •217 Глава 5
- •219 Глава 5
- •221 Глава 5
- •223 Глава 5
- •225 Глава 5
- •227 Глава 5
- •232 Глава 5
- •234 Глава 5
- •236 Глава 5
79 Глава 2
Вы можете проверить это, пользуясь таблицей истинности операции &, которая была приведена выше. После присваивания result будет иметь значение 0x40, что соответствует символу
Поскольку & дает 0, если любой из соответствующих битов операндов равен 0, вы можете применять его в тех случаях, когда в переменной определенные биты должны были установлены в 0, независимо от их исходного значения. Это достигается соз- данием так называемой "маски" и комбинацией ее с исходной переменной с помо- щью &. Вы создаете маску, специфицируя значение 1 в тех битах, в которых старое значение нужно сохранить, и 0 — в тех битах, значение которых нужно сбросить в 0. Результатом применения И к маске и другому целому будет бит 0 в тех позициях, где стоит 0 в маске, и неизменное значение бита исходной переменной там, где в маске стоит 1. Предположим, что имеется переменная letter типа char, где в целях демон- страции вы хотите сбросить в 0 старшие 4 бита. Это очень просто достигается уста- новкой значения маски OxOF и комбинацией ее со значением letter посредством &:
или, более коротко:
А
&
1'
I l
Рис. 2.9. Применение маски к значению переменной
Нулевые биты маски сбрасывают в ноль соответствующие биты letter, а биты маски, равные 1, оставляют соответствующие биты letter неизмененными.
Аналогично вы можете использовать маску 0xF0, чтобы сохранить 4 старших бита и сбросить в ноль 4 младших.
Таким образом, следующий оператор:
даст в результате изменение значения letter с 0x41 на 0x40.
Битовое ИЛИ
Битовое ИЛИ (|), иногда называемое включающим ИЛИ, комбинирует соответ- ствующие биты операндов так, что результат равен 1, если хотя бы один из битов операндов в данной позиции равен 1, и 0, если оба бита равны 0. Таблица истинности для битового ИЛИ показана в табл. 2.6.
Данные,
переменные и вычисления
Вы можете проверить это на примере установки индивидуальных флагов, упакован- ных в переменную типа int. Предположим, что имеется переменная по имени style типа short, которая содержит 16 индивидуальных 1-битных флагов. Предположим далее, что вам нужно установить отдельные флаги в переменной style. Одним из способов сделать это является определение значений, которые можно скомбиниро- вать операцией ИЛИ для установки определенных битов в 1. Чтобы установить край- ний правый бит, вы можете определить переменную:
Чтобы установить второй справа бит, вы должны определить вторую переменную
hredraw:
Тогда для установки двух правых крайних битов переменной style в 1 можно вос- пользоваться следующим оператором:
Эффект от этого оператора проиллюстрирован на рис. 2.10.
Поскольку операция ИЛИ дает в результате 1, когда любой из двух битов операн- дов равен 1, то объединение с ее помощью двух переменных дает в результате уста- новку обоих бит.
Очень часто в программах предъявляется требование иметь возможность устано- вить набор определенных флагов, не трогая остальных, которые могут устанавливать- ся где-то в другом месте. Вы можете легко сделать это с помощью такого оператора:
Этот оператор установит два крайних правых бита переменной style в 1, остав- ляя нетронутыми все остальные.