Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции С раздача.doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
423 Кб
Скачать
☆

Выражения

Выражение состоит из операндов и знаков операции и используется для вычисления значения определенного типа.

Операции

Унарные

Приоритет

Действие

2

+ + увеличить на 1

- - уменьшить на 1

2

~ поразрядное отрицание

! логическое отрицание

- арифметическое отрицание

2

+ унарный плюс

2

& взятие адреса

2

* разыменование разадресация

2

(type) преобразование типа

2

sizeof размер

Бинарные и тернарные операции

Приоритет

Действие

3

* умножение

/ деление

% остаток от деления

4

+ сложение

- вычитание

5

<< сдвиг влево

>> сдвиг вправо

6

< меньше

<= меньше или равно

> больше

>= больше или равно

7

= = равно

! = не равно

8

& поразрядная конъюнкция И

9

^ поразрядное исключающее ИЛИ

10

| поразрядная дизъюнкция

11

&& логическое И

12

| | логическое ИЛИ

13

? : условная операция (тернарная)

14

= присваивание

* = умножение с присваиванием

/ = деление с присваиванием

% = остаток от деления с присваиванием

+ = сложение с присваиванием

- = вычитание с присваиванием

<< = сдвиг влево с присваиванием

>> = сдвиг вправо с присваиванием

& = поразрядное И с присваиванием

| = поразрядное ИЛИ с присваиванием

^ = поразрядное искл. ИЛИ с присваиванием

15

, последовательное вычисление

Каждый операнд может быть выражением, или в частном случае – константой или переменной.

Если операции одного приоритета, то

      • справа налево вычисляются

          • унарные операции,

          • условная операция,

          • операция присваивания a=b=c равносильно a=(b=c).

      • слева направо вычисляются все остальные.

a+b+с равносильно (a+b)+c,

a>b>c равносильно (a>b)>c.

Для изменения порядка вычислений используют круглые скобки.

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

Если типы операндов различны, то перед вычислением выполняются преобразования типов (от более коротких к более длинным для сохранения значимости и точности).

При этом может измениться внутреннее представление (int  float) или интерпретация внутреннего представления (char  unsigned short int).

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

+ + и - - две формы записи :

префиксная <операция> <операнд>

постфиксная <операнд> <операция>

Префиксная форма:

Операнд изменяется, новое значение – результат выражения.

Постфиксная форма:

Результат выражения – исходное значение операнда, после вычисления выражения операнд изменяется.

Операнд – в общем случае это L – значение.

L – значение – это любое выражение, адресующее некоторый участок памяти, в который можно занести значение.

b=1;

a= + + b; (a=2, b=2)

c=b + +; (c=2, b=3)

b=4;

c= b - -; (c=4, b=3)

a= - - b; (a=2, b=2)

операции отрицания

int x = 3, y;

арифметическое

y = -x; /*y=-3*/;

поразрядное

y= ~ x; /*y= 0011 -> 1100 -> -4;*/

логическое

y=!x; /* y= 0*/

Логические и побитовые операции

int x=3,y =5,z;

Таблицы истинности

логические

поразрядные

И

0

1

0

0

0

1

0

1

Z= (x>10) && (y<10) : /* z=0*/

Z= (x<10) && (y<10) :/*z=1*/

Z=x & y; /*z= 1*/

ИЛИ

0

1

0

0

1

1

1

1

Z= (x>10) || (y<10) : /* z=1*/

Z= (x>10) || (y>10) :/*z=0*/

Z=x | y; /*z= 7*/

Искл

ИЛИ

0

1

0

0

1

1

1

0

Z=x ^ y; /*z= 6*/

Операции деления

% - остаток от деления. Операция применима только к целым операндам.

/ - деление. Если операнды целые, то результат этой операции – целое число.

Пример.

int x=13.y=2,z;

double a;

z= x/y; // z=6

z= x/y; // a=6

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

a=(double)x/(double)y; //a=6,5

ОПЕРАТОРЫ

Оператор «выражение»

Любое выражение, завершающееся точкой с запятой, рассматривается как опера­тор, выполнение которого заключается в вычислении выражения. Частным слу­чаем выражения является пустой оператор « ;». (он используется, когда по синтак­сису оператор требуется, а по смыслу - нет). Примеры:

i++; // выполняется операция инкремента

а* = b + с; // выполняется умножение с присваиванием

Операторы ветвления

Условный оператор if

Условный оператор if используется для разветвления процесса вычислений на два направления. Формат оператора:

if ( выражение) оператор_l; [else оператор_2;]

Group 21

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

Одна из ветвей может отсутствовать, логичнее опускать вторую ветвь вместе с ключевым словом еlse. Если в какой-либо ветви требуется выполнить несколь­ко операторов, их необходимо заключить в блок, иначе компилятор не сможет понять, где заканчивается ветвление. Блок может содержать любые операторы, в том числе описания и другие условные операторы (но не может состоять из од­них описаний). Необходимо учитывать, что переменная, описанная в блоке, вне блока не существует.

if (b>а) тах = b; else тах = а:

Примеры:

  1. if (а<0) b = 1;

Отсутствует ветвь еlse. Подобная конструкция называется пропуск оператора», поскольку присваивание либо выполняется, либо пропускается в за­висимости от выполнения условия.

  1. if (а<b && (a>d || а==0))

b ++;

else {b *= а; а = 0:}

Если требуется проверить несколько условий, их объединяют знаками логиче­ских операций. Например, выражение будет истинно в том случае, если выполнится одновременно условие а<b и одно из условий в скобках. Если опустить внутренние скобки, будет выполнено сначала логическое И, а потом ­ИЛИ.

  1. if (а<b)

{if (а<с)

т = а;

else т = с:}

else {if (b<с)

т = b;

else т = с:}

Вычисление наименьшего значения из трех переменных. Фи­гурные скобки в данном случае не обязательны, так как компилятор относит часть еlse к ближайшему if.

  1. if (а++) b++:

Хотя в качестве выражений в операторе if чаще всего используются операции отношения, это не обязательно.