double arrow

Операции отношения и логические операции

Арифметические операции

Выражения

План

1. Выражения

2. Арифметические операции

3. Операции отношения и логические операции

4. Операции инкремента и декремента

Домашнее задание: Самостоятельная работа №3

Выражение строится из одной или нескольких операций. Объекты этих операций называются операндами. Операции бывают унарные - которые действуют на один операнд - например унарный минус (-x) и бинарные - которые действуют на два операнда (сложение и т.п. - x+y).

Вычисление выражения состоит в выполнении одной или нескольких опера­ций, приводящих к результату. Тип данных выражения обычно определяется типами его операндов. Когда в выражении присутствует более одного типа данных, то происходит преобразование типа в соответствии с определенными правилами.

Выражение, в котором участвуют две или более операции, называется составным (например, x+y-z). Порядок применения операций определяется приоритетом операции (какая операция выполняется раньше, а какая позже) и ее ассоциативностью (слева направо она выполняется или справа налево).

Простейшее выражение - просто операнд без операции - т.е. константа или переменная. Например 3.14159 или index. Тип выражения соответствует типу данной константы или переменной.

Бинарными арифметическими операциями являются +, -, *, / а также операция взятия остатка %. Операции *, / и % имеют более высокий приоритет, чем + и - (как и в Паскале). Например, x + y * z трактуется как x + (y*z), что естественно. Если нужно изменить порядок вычислений - то нужно, как и в Паскале, использовать скобки. Есть два отличия от Паскаля

1) Операция % берет остаток (т.е 22 % 6 будет 4) и применима только к целым

2) Если операция / применяется к целым, то результатом деления будет

тоже целое, а остаток отбрасывается (22 / 6 будет 3).

Арифметические операции с одинаковым приоритетом выполняются слева направо.

Есть и унарные операции + и -. Их приоритет выше, чем у бинарных –

-x * y значит (-x) * y a не -(x * y).

Следует заметить, что в результате выполнения арифметических операций

можно выйти за диапазон типа. Например

unsigned char uc = 32, uc1 = 10;

uc = uc * uc1;

В результате uc должно получить значение 320, а верхний диапазон unsigned char, как известно, равен 255. Что при этом будет - зависит от машины.


Сводная таблица с приоритетами

Операция| Назначение Использование
! | логич. НЕ ! в
< | <= | > | >= | меньше меньше или= больше больше или= в < в в <= в в > в в >= в
== | != | равно не равно в == в в != в
&& | логич. И в && в
|| | логич. ИЛИ в || в

Приоритет операций отношения и логических операций ниже, чем у арифметических операций ( i < j+1 трактуется как i < (j+1) ).

Одним из основополагающих идейных отличий С и С++ от Паскаля, так сказать, на повседневном уровне является то, что все операции отношения и логические операции возвращают целое значение -

1 - если условие истинно

0 - если условие ложно

В С нет булевского типа. Логические операции тоже оперируют с целыми величинами, или с величинами, которые можно преобразовать в целые (в том числе и с плавающей точкой). При этом истиной считается любое ненулевое значение, а ложью - ноль. Отсюда ясно, что функция, возвращающая целое или приводимое к целому значение и вообще любое выражение, приводимое к целому, может в С использоваться в логических условиях.

Логические операции && и || аналогичны по принципу действия паскалевским and и or. Результат && - истина (1) если оба ее операнда истинны (не равны 0). Результат || истина если хотя бы один из ее операндов истина. Гарантируется, что операнды вычисляются слева направо. Вычисление прекра­щается, как только определится, является ли выражение истинным или ложным. Это значит, что для выражения

выр1 && выр2

выр2 не будет вычисляться, если значение выр1 ложно (равно 0) а для выражения

выр1 && выр2

выр2 не будет вычисляться, если значение выр1 истинно (не равно 0) Следует отметить, что, в отличие от Паскаля, приоритет && и || ниже, чем у операций равенства и отношения и поэтому если нужно, к примеру, проверить, попала ли переменная в диапазон от 0 до 100, то такая запись корректна

if (i1 >= 0 && i1 <= 100)

и не требует дополнительных скобок.

Логическое отрицание ! преобразует свой операнд в истину (1) если он равен 0 и в ложь (0) если он не равен нулю.

Выражение (!found) возвращает истину, пока found равен нулю.

Можно писать if(!found)

а можно

if(found == 0)

Каким образом писать - дело программиста, но в сложных выражениях лучше вместо ! явно проверять на равенство.

Так же точно вместо

if (found != 0)

можно просто написать

if (found)


Сейчас читают про: