Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комплексное пособие Си.pdf
Скачиваний:
57
Добавлен:
12.03.2015
Размер:
1.57 Mб
Скачать

Операции

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

Существует большое количество операций различных видов: арифметические, логические, битовые и т.д. Наиболее просты для понимания арифметические операции. Каждая операция характеризуется выполняемыми действиями и результатом операции.

Простейшие арифметические операции

Определены для данных арифметических типов, т.е. вещественных

(float, double) и целых (int, short, long, char и соответствующих им беззнаковых данных unsigned int, unsigned short, unsigned long, unsigned char).

Действие этих операций - соответствующее арифметическое действие. Результат операции - результат арифметического действия.

Одноместные арифметические операции имеют один операнд. К ним относятся операции "+" и "-", которые меняют знак операнда.

Результатом этих операций является значение операнда с противоположным знаком.

Двуместные арифметические операции имеют два операнда. К ним относятся операции + , - , * , / и % . Каждая из этих операций выполняет соответствующее действие, результат которого и является результатом операции. Операция + вычисляет сумму операндов, операция - вычисляет разность, операция * вычисляет произведение, операция / вычисляет частное от деления вещественных операндов или целую часть частного от деления целых операндов, операция % вычисляет остаток от деления первого операнда на второй.

32

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

всоответствии с общепринятыми приоритетами. Приоритет можно изменить

спомощью скобок.

Примеры выражений с арифметическими операциями:

a + b%c

(a + b)/3*5

Операция присваивания

Операция присваивания выполняет действия по занесению результатов выражения, стоящего справа от знака присваивания = в область памяти, определяемую выражением, стоящим слева от знака присваивания. Чаще всего слева от знака присваивания стоит простая переменная. При выполнении присваивания происходит преобразование типа результата правого выражения к типу левого операнда.

Результат операции присваивания - значение присвоенной величины. Поскольку присваивание является операцией, а не оператором, то в

одном выражении допускается несколько присваиваний. В этом случае они выполняются справа налево

Например:

ab = ( c = d+5 ) * 6

Присваивание имеет самый низкий приоритет из всех операций.

Использование в выражениях операндов разных типов

При участии в арифметических операциях операндов разных типов, перед выполнением операции осуществляется преобразование типов так, чтобы не было потери точности. Затем осуществляется сама операция.

Типы данных в порядке возрастания точности:

char, short, int, long, float, double.

Пример:

33

int a, c;

 

 

 

 

float d, e;

/*

c будет преобразовано в

float

*/

e

= d*(c+e);

a

= 'A' + 20;

/*

'A' будет преобразовано

в int

*/

Операции преобразования типов

В некоторых случаях правила преобразования типов не позволяют получить верный результат, например:

int a, b;

 

float c;

 

a = 7; b = 14;

/* результат 0 */

c = a/b;

Для получения правильного результата можно поступить так

c = a; c = c/b;

Явное преобразование типов:

(<имя_типа>) <выражение>

имя_типа - название любого типа, в том числе и заданного программистом.

Для нашего примера применение операции преобразования типа будет выглядеть так:

c = (float)a / (float)b;

Операция преобразования типа имеет приоритет более высокий, чем арифметическая операция.

Дополнительные арифметические операции

Язык Си имеет ряд уникальных операций, как правило, отсутствующих в других языках программирования. К этим операциям относятся операция увеличения на единицу ++ и операция уменьшения на единицу. Например:

a = a + 1; эквивалентно a++; или ++a;

Выполнение операций "++" или "--" вызывает увеличение или уменьшение на единицу значения соответствующей переменной.

34

Результат операций может быть различным в зависимости от того, где находятся знаки операций: если используется постфиксная операция, т.е операция ++ или -- записана после переменной, то результатом операции будет значение переменной до увеличения или уменьшения. Иными словами переменная сначала используется в выражении, а затем увеличивается или уменьшается. Например:

a = 4;

b = ( a++ ) * 5; /* здесь b = 20 */

Если используется префиксная операция, т. е. операция ++ или -- записана перед переменной, то результат операции - значение переменной после увеличения или уменьшения. Иными словами переменная вначале увеличивается или уменьшается, затем используется в выражении.

Например:

a = 4;

b = ( ++ a ) * 5; /* здесь b = 25 */

Приоритет операций выше, чем у * или /, но все равно рекомендуется ставить скобки, чтобы не запутаться.

Дополнительные операции присваивания

Очень часто в программах присутствуют операторы вида

a = a + b; a = a - b; a = a * b; a = a / b;

Они изменяют значения некоторых переменных. В языке Cи для сокращения программ и повышения их эффективности используются дополнительные операторы присваивания:

a += b; a -= b; a *= b; a /= b; a %= b;

Дополнительные операции присваивания должны быть записаны слитно, без пробелов. Действие операции - изменение значения переменной, стоящей слева от знака операции. Результат - значение измененной переменной.

35