Г. Шилдт - Полный справочник по C++ (1109478), страница 12
Текст из файла (страница 12)
Арифметические операторы В табл. 2.4 приведен список арифметических операторов языка СгС4+. Операторы +, —, * и у выполняются точно так же, как и н болыдинстве лругих языков программирования. Их можно применять практически к любым встроенным типам данных. Если оператор у применяется к целому числу или символу, дробная часть отбрасывается. Например, 5/2 равно 2. Часть 1.
Основы языка Стт: подмножества С веста гса 1пс (16 бнт) спа (32 бнт) 1опд гпс спС (16 бнт) спа (32 бнт) )спд гпс 1сгд гп( 11саС дссЫе 1спд бссЫе Еалн значение > 125, результатом будет отрицательное число Старшие 6 бнт Старшие 6 бнт Старшие 24 бнт Старшие 24 бит )(ет Старшие 16 бит Старшие 16 бнт Нет Дробная часть н, возможно, что-го еще Точность, результат окруптяетан Точность, результат округляется Таблица 2.4, Арифметические операторы Дейсгаяе Вычитание, а талке унарный минус Сложение Умножение Деление Деление ло модулю Дехрементация Иннрементация Оператор деления по модулю ч, как и в других языках программирования, возвращает остаток целочисленного деления. Однако этот оператор нельзя применять к числам с плавающей точкой. Рассмотрим пример, в котором используется оператора.
1пс х, у; х = 5 — 2 рс1пст("Ъс) ", х/у)) /* Выведет число 2 */ рг1пей("Ъс) ", хну)г /* Выведет число 1, остаток целочисленного деления */ х = 1 = 2 ртапай(ыао во", х/у, хву); /* Выведет числа О 1 */ Последний оператор программы выводит на экран число О и 1, поскольку результат целочисленного деления 1/2 равен О, а остаток — 1. Унарный минус умножает свой операнд на — 1. Иными словами, унарный минус меняет знак операнда на противоположный. Инкрементация и декрементация В языке С/С++ есть два полезных оператора, которыми не обладают некоторые другие языки.
Это операторы инкрементации и декрементации ++ и —. Оператор ++ добавляет 1 к своему операнду, а оператор — вычитает ее. Таким образом, оператор В х = х+1г эквивалентен оператору В ++х;, а оператор В х = х-1; эквивалентен оператору В х —," Операторы инкрементации и декрементации имеют две формьк префиксную н постфиксную. Например, фрагмент В х = х+1; можно переписать так Глава 2. Выражения й ++х; или так В хь»-: Однако между префиксной и постфиксной формами сушесгвуст важное отличие, когда они используются внутри выражений. Если используется прсфиксная форма, опеозторы инкремснтации и декрементации примснякпся к сирому значению операнла„ ; если постфиксная — к новому. Например, в результате выполнении операторов х=зо; у =+»х; переменной у будет присвоено значение 11. Однако, если переписать этот фрагмент иначе: х = зс; у = х++;, переменная у будет равна 1О.
В обоих случаях переменная х в результате станет равной 11. Разница заключается в том, когда это происходит. Большинство компиляторов языка С/С++ созлзют для операторов инкрементации и декрементации очень быстрый и эффективный объектный код. Он выполняется намного быстрее, чем код„соответствуюший оператору присваивания. По этой причине операторы инкрементации и декрементации следует применять всегда, когда это возможно. Ниже приведены приоритеты арифметических операторов. высший - (унарный минус1 * / везший» Операторы, имеюшие одинаковый приоритет, выполняются слева направо.
1'азумеется, для изменения порядка вычисления операторов можно применять скобки. В языке С/С++ скобки интерпретируются точно так же, как и во всех других языках программирования. Они позволяют присвоить некоторым операторам или группе операторов более высокий приоритет. Операторы сравнения и логические операторы В термине олерптор сравнения слово "сравнение" относится к значениям операндов. В тсрмице лосичегкио оператор слово "логическии" относится к способу, которым устанавливаются эти отношения.
Поскольку операторы сравнения и логические операторы тесно связаны лруг с лругом, мы рассмотрим их вместе. В основе и операторов сравнения, и логических операторов лежат понятия "истина'* и "ложь'*. Б языке С истинным считается любое значение, не разное нулю. Ложное значение всегда ровно О. Выражения, используклцие операторы сравнения и логические операторы, возврагцают О, если результат ложен, и 1, если результат истинсн В языке С++ истинные и ложные значения разли*шются точно так же, но.
помимо этопл предусмотрен особый тип данных ьоох и булавы константы егое и дазаа. В программах на языке С++ значение О автоматически прсобразовывастся в константу газае, а ненулевое значение — в константу огае. Справедливо и обратное утвержление: константа егие преобразовывается в значение 1, а константа йазаа — в число О.
Результатом выражений, в которьвх используются операторы сравнения и логические операторы, являются константы егьа и газае. Олнако, поскольку эти Часть 1. Основы языка С-нс подмножество С константы автоматически преобразовываются в числа 1 или О, различие между языками С и С++ в этом аспекте становится чисто академическим. Операторы сравнения и логические операторы приведены в табл 2.5. Таблица 2.5.
Операторы сравнения и логические операторы Операторы сравнение Оператор > Действие Больше Больше ипн равно Меньше Меньше нпн равно Не равно Логические операторы Оператор Рассмотрим таблицу истинности лля логических операторов, используя значения 1 и О. Операторы сравнения и логические операторы имеют более низкий приоритет, чем арифметические операторы. Таким образом, выражение 10 > 1 + 12 будет вычислено так, будто оно записано следующим образом: 10 > (1 + 12).
Разумеется, в обоих случаях зто выражение будет ложным. В одном и том же выражении можно использовать несколько операторов. В 10>з са «1а<в) ) ) э<=а В данном случае результатом будет истинное значение. Несмотря на то что ни в языке С, ни в языке С++ нет оператора "исключительное ИЛИ" (ХОК), его можно легко реализовать в виде функции, используя лругне логические операторы. Результатом оператора ХОК является истинное значение, только если один из операндов (но не оба) истинен. Программа, приведенная ниже, содержит функцию хог(), применяющую операцию исключающего ИЛИ к двум своим аргументам. Еьпс1ице свсй1о.)т> ьпс хог<ьпе а, 1пс )з) ьпт. шаьп(чоЫ) ( рг1пей("Ъй", хог( 1, О)); ргьпгй("Ъй", хог(1, 1))у ргьпет('Ъс)", хог(0, 1)); ргтпса<"Ва , хог<а, О)); гесцгп О< ) Глава 2.
Выражены Р 0 О 1 1 Ч 0 1 1 0 Раич 0 1 0 Действие И ИЛИ НЕ Р))Ч 0 1 1 1 <р 1 1 О 0 /* Выполняет операцию исхлючвююего ИЛИ, используя лва аргумента. */ йпс хою(гпс а, апс и) ( тегцхгг (а )' ,Ь) аа . (а аа Ь) г Ниже приведены приоритеты опсрато(юв сравнения и логических операторов. высший низший является ложным. Однако, если перегруппировать сиз операнды с помошью скобок, результат станет противоположным.
ф ((о аа о)) )) о Помните: вес выражения, используюшис операторы сравнения и логические операторы, имеют либо истинное, либо ложное значение. Следовательно, фрагмент программы, приведенный ниже, верен. В результате сто выполнения на зкран будет выведено значение !, г г апс хг х=1ОО; рх1пгй("Вд", х>10)г Побитовые операторы В отличие от многих лруп(х языков, язык СгС+Е содержит полный набор побитовых операторов.
Поскольку язык С был разработан в качестве замены языка ассемблера, он предусматривает многие операции низкого уровня, в частности, побшггоаьге оггсрггции (Ь(пт1зс орспяюп). предназначенные лля проверки„ус(ановки и сдвига битов. из которых состоят байты и машинныс слова, образуюшис псрсмснныс типа стшх- или 1пс. Побитовые операции нельзя применять к псрсмсниым типа В1овп, с(оцЬ1е, 1опа с(оиЬ1е, хоай зххз1 и других, более сложных, типов. Побитовые операторы языка С/С+ ь перечислены в табл. 2.б.
Эти операторы приыснякпся к отлсльным битам операндов. Таблица 2.6. Побитовые операторы Действие Оператор И ИЛИ Исключающее ИЛИ дополнение до единицы (НЕ) Сдвиг вправо Сдвигвпево » сс Часть (. Основы языка С+ь: подмножество С Как и лля арифметических операторов, естественный порядок вычислений можно изменять с помошью скобок. Например, выражение $|оаао ((о Побитовые операции И, ИЛИ и НЕ (дополнение до единицы) описываются теми жс таблицами истинности, что и их логические аналоги, за исключением того, что теперь все сравнения проводятся поразрядно.