Смекни!
smekni.com

Язык программирования С 2 (стр. 6 из 7)

б) некоторые операции могут работать только с определенными типами данных, например, побитовые операции применяются только к целым типам данных;

в) в сложных выражениях, содержащих ряд операций, исполнение большинства операций выполняется слева направо, за исключением, унарных операций и операций присваивания. Если необходимо задать строго определенный порядок исполнения выражения можно использовать круглые скобки;

г) в сложных выражениях последовательность исполнения операций определяется их приоритетом (см. крайнюю правую колонку в табл. 4.1, где 1 – наибольший приоритет исполнения операции).

Таблица 4.1.

Опера-ция Назначение Пример Прио-ритет
Первичные операции
[] индекс массива x[2][0]=5; 1
() вызов функции, очередность выполнения y=sin(6.28*(x+1)); 1
. элемент структуры (прямой доступ) time.tm_hour=5; 1
-> элемент структуры (косвенный доступ) time->tm_hour=5; 1
Унарные операции
++ инкремент (увеличение на единицу) i++ 2
–– декремент (уменьшение на единицу) i–– 2
sizeof размер в байтах x=sizeof(int); 3
(тип) преобразование типа y=(float)5/2; 3
- унарный минус (изменение знака) y=-x; 3
* косвенная адресация int x=*y; 3
& взятие адреса scanf(“%d”,&x); 3
Арифметические операции
* умножение 20*x 4
/ деление x/10 4
% деление по модулю x%10 4
+ сложение x+20 5
вычитание 40–x 5
Битовые операции
~ побитовое НЕ y=~x; 3
<< побитовый сдвиг влево y=x<<1; 6
>> побитовый сдвиг вправо y=x>>1; 6
& побитовое И y=x&15; 9
^ побитовое исключающее ИЛИ y=x^15; 10
| побитовое ИЛИ y=x|15; 11

Продолжение таблицы 4.1.

Опера-ция Назначение Пример Прио-ритет
Операции отношения
< меньше if (x<6) 7
> больше if (x>6) 7
<= меньше или равно if (x<=6) 7
>= больше или равно if (x>=6) 7
== равно if (x==6) 8
!= не равно if (x!=6) 8
Логические операции
! логическое отрицание (операция НЕ) if (!x) 3
&& логическое умножение (операция И) if (x>0 && x<6) 12
|| логическое сложение (операция ИЛИ) if (x<0 || x>6) 13
Условная операция
?: при условии a>b?10;-10 14
Операции присваивания
= присваивание x=5 15
*= присвоение произведения x*=3 15
/= присвоение частного x/=3 15
%= присвоение остатка x%=3 15
+= присвоение суммы x+=3 15
–= присвоение разности x–=3 15
<<= присвоение левого сдвига x<<=3 15
>>= присвоение правого сдвига x>>=3 15
&= присвоение И x&=3 15
^= присвоение исключающего ИЛИ x^=3 15
|= присвоение ИЛИ x|=3 15
Прочие операции
, запятая a=1, b=2; 16

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

Операции сложения, вычитания, умножения и деления можно использовать ко всем типам данных. Если операнды одного типа, то результат будет того же типа. Например, вычисляя выражение 12/5, так как операнды целые числа, то в результате получим целое число 2 (округление не выполняется). С другой стороны, если рассчитывается выражение 12./5, результатом будет вещественное число 2.4.

Операция деление по модулю используется при необходимости вычисления остатка от деления целых чисел, например, при вычислении выражения 17%3, результатом будет целое число 2.

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

Эти операторы имеют наименьший приоритет при вычислении выражений, т.е. выполняются в последнюю очередь (за исключением оператора запятая). В языке Си знак равенства означает выполнение операции присваивания. Например, выражение

x=10+3*4;

означает, что вначале вычисляется выражение слева от знака равенства и затем результат присваивается переменной x. Поэтому выражения

x=x+2;

приобретают при программировании строго определенный смысл: вначале вычисляется выражение справа от знака равенства (к старому значению переменной x прибавляется число 2) и затем полученный результат присваивается переменной x.

Оператор присваивания выполняется справа налево. В языке Си возможно использования выражений с несколькими операторами присваивания, например, допустимо использовать следующее выражение

с=b=5*(a=5*45);

Оно выполняется в следующем порядке: вычисляется значение 5*45, результат присваивается переменной ‘а’, затем эта переменная умножается на 5 и результат присваивается переменной ‘b’, и далее присваивается переменной ‘c’.

Помимо традиционной операции присваивания в языке Си существуют дополнительные операции: +=, –=, *= и т.п. Например, операции слева и справа в приведенной ниже таблице идентичны

a=a+10; a+=10;
a=a/10; a/=10;
a=a&64; a&=10;
a=a>>1; a>>=1;

Достоинства этих операции – они выполняются быстрее, чем операции с обычным присваиванием.

4.3.1.Пример 4.1

Пример использования арифметических операций и операций присваивания:

Листинг 4.1

#include <stdio.h>

void main()

{

int a=25,b=3,с,d;

float x=25.,y=3,z;

c=a/b;

d=a%b;

printf(“Деление целых чисел: %d&bsol;nОстаток: %d&bsol;n”,c,d);

z=x/y;

printf(“Деление вещественных чисел: %d %d&bsol;n”,c,d);

a=a+10;

y=y*3;

printf(“Традиционная форма операции присваивания: %d %f&bsol;n”,a,y);

a+=10;

y*=3;

printf(“Присваивание со сложение и умножением: %d %f”,a,y);

}

Результат выполнения программы:

Деление целых чисел: 8

остаток: 1

Деление вещественных чисел: 8.333333

Традиционная форма операции присваивания: 35 9.000000

Присваивание со сложение/умножением: 45 27.000000

4.4. Операции отношения

Эти операции позволяют сравнивать друг с другом данные, например:

x>0 y<=xz!=27 g==’&bsol;n’

Значения переменных после выполнения операции сравнения не изменяется, каждое выражения проверяется – истинно оно или ложно. В языке Си истинному значению выражения с операцией отношения соответствует единичный результат, ложному – нулевой. Например, выражение

y=x>5;

определяет значение переменной ‘у’ равным единице для ‘x’ равным 25 и равным нулю для ‘х’ равным –5.

Согласно табл. 4.1. наибольшим приоритетом обладает операции ‘<’ и ‘>’, наименьшими равенство и неравенство. Поэтому, например, выражение

(x>5 == y<10)

будет выполняться в следующем порядке:

– сравнение y<10;

– сравнение x>5;

– сравнение на равенство.

4.5. Логические операции

В языке Си отсутствуют данные типа булева переменная, но существуют логические операции, в которых можно использовать данные типа символ или целое в любой модификации. При этом подразумевается, что нулевое значение выражения соответствует значению «FALSE» (ложь), а любое другое – значению «TRUE» (истина). Эти операции: логическое умножение && (операция И), сложение || (операция ИЛИ) и отрицание ! (операция НЕ). Результат выполнения этих операций для различных значений целых переменных a и b приведен в табл. 4.2.

Таблица 4.2.

Значение
переменной a
Значение
переменной b
Результат
a&&b a||b !a !b
ноль ноль 0 0 1 1
ноль отлично от ноля 0 1 1 0
отлично от ноля ноль 0 1 0 1
отлично от ноля отлично от ноля 1 1 0 0

Следует отметить, что «истинным» значением переменной считается не только ее положительное значение, но и отрицательное. Если выражение при выполнении логической операции является «истиной», то результату присваивается значение единица, в противном случае – нулевое значение.

4.5.1. Пример 4.2

Листинг 4.2

#include <stdio.h>

void main()

{

int x=5,y=-3;

printf(“x&&y x||y !x !y x>3 y>0&bsol;n”);

printf(“%3d %3d %3d %3d %3d %3d”,x&&y,x||y, !x, !y,x>3,y>-10);

}

Результатом исполнения программы будут строки на экране

x&&yx||y !x !yx>3 y>0

1 1 0 0 1 0

Согласно табл. 4.1. наибольшим приоритетом среди логических операций обладает операция НЕ. Поэтому, например, оператор

z=a&&b||!c&&d;

будет выполняться в следующем порядке:

– операция НЕ переменной c;

– операция И операндов a и b;

– операция И операндов (!c) и d;

– операция ИЛИ операндов (a&&b) и (!c&&d).

Логические операции можно использовать и для реализации сложных неравенств. Например, для составления условия 10<x<20 в языке Си необходимо записать логическое выражение (x>10 && x<20), а математическое выражение x<10Èx>20 можно представить в виде (x<10 || x>20).

4.6. Битовые операции

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

Каждая из битовых операций служит определенным целям. Например, операция & (И) полезна для проверки единичных значений отдельных битов числа, а также для установки определенных битов в «0». Операция | (ИЛИ) полезна для установки в «1» битов. Операция ^ (Исключающее ИЛИ) используется для проверки несовпадения битов. Операции сдвига << и >> позволяют сдвинуть все биты числа влево/вправо на заданное количество разрядов. Недостающие значения битов дополняются нулями, информация в исчезающих битах теряется.