- •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
76 Глава 2
Кроме того, как я писал в Ех2_05. срр относительно присваивания с участием раз- ных типов, вы всегда можете прояснить код, сделав приведение явным:
Вы можете применять явные приведения с числовыми значениями любых типов, но должны осознавать возможность потери информации. Если вы приводите значе- ние типа float или double к типу long, например, то при преобразовании теряете дробную часть, поэтому если значение было меньше 1.0, результатом будет 0. Если же вы приводите значение типа double к типу float, то теряете точность, потому что float имеет лишь 7-значную точность, в то время как double — 15-значную. Даже приведение между целочисленными значениями может привести к потенциальной потере информации, в зависимости от конкретных значений, участвующих в нем. Например, значение целого типа long может выйти за пределы допустимых для типа short, поэтому приведение значения long к типу short может привести к потере информации.
Вообще лучше избегать приведений типов, насколько это возможно. Если вы об- наруживаете, что ваша программа нуждается в большом количестве приведений, ве- роятно, это следствие неудачного общего дизайна, и его лучше пересмотреть. Вам нужно проверить структуру программы и применяемые типы данных, чтобы найти способ исключить или хотя бы сократить случаи применения приведений.
Приведения в старом стиле
До того, как в С++ появилась операция приведения staticcatso () (а также другие операции приведения: const_cast<> (), dynamic_cast<> () и reinterpret_ casto (), о которых мы поговорим позднее), явное приведение результата выраже- ния к другому типу записывалось следующим образом:
Здесь результат выражения приводится к типу, указанному в скобках. Например, оператор вычисления strips_per_roll из предыдущего примера мог быть записан так:
По сути, существуют четыре разных вида приведений, и синтаксис приведений старого стиля покрывал все. По этой причине код, использующий приведения в ста- ром стиле, более подвержен ошибкам — компилятору не всегда были ясны ваши наме- рения, и вы не получали ожидаемый результат. Хотя вы встретите в унаследованном коде интенсивное использование приведений старого стиля (это все еще часть язы- ка, и их много в коде MFC — по причинам исторического характера), я настоятельно рекомендую в новом коде применять только новые приведения.
Битовые операции
Битовые операции трактуют свои операнды как последовательности индивидуаль- ных битов, а не числовые значения. Они работают только с целочисленными пере- менными или целыми константами в качестве операндов, поэтому с ними могут ис- пользоваться только типы данных short, int, long, signed char и char, а также их беззнаковые варианты. Битовые операции удобны для программирования аппаратных
Данные,
переменные
и
вычисления
устройств, где состояние устройства часто представляется серией индивидуальных флагов (то есть, каждый бит может описывать состояние определенного аспекта дан- ного устройства), или же их можно применять в ситуациях, когда желательно упако- вать набор флагов "включено/выключено" в единую переменную. Вы увидите их в действии, когда будете подробно изучать средства ввода-вывода, где отдельные биты служат для управления различными опциями управления потоками данных. Существует шесть битовых операций.
![]()
В следующем разделе мы посмотрим, как работает каждая из них.
Битовое И
Битовое И (&) — это бинарная операция, которая комбинирует соответствующие биты своих операндов определенным образом. Если в обоих операндах соответству- ющие биты равны 1, то и в результате будет 1, если же оба или один из битов операн- дов равен 0, то и в результате соответствующий бит будет равен 0.

Таблица 2.5. Таблица истинности для операции битового И
![]()
Рис.
2.8. Работа операции битового И
ля
того чтобы понять, что произойдет, нужно
взглянуть на битовые шаблоны.
Буквы
'А'
и 'Z'
соответствуют шестнадцатеричным
значениями 0x41 и 0х5А, соответ-
ственно
(см.
в приложении Б таблицу кодов ASCII).
Работа операции битового И с
этими
двумя значениями показана на рис. 2.8.
