Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka_Vinogradova.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
628.22 Кб
Скачать

3.3 Выражения.

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

Рассмотрим составные части выражений и правила их вычисления.

3.3 .1 Операции.

В таблице 2 приведен список основных операций, определенных в языке С++, в соответствии с их приоритетами ( по убыванию приоритетов).

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

Таблица 2. Основные операции языка С++

Операция

Краткое описание

Унарные операции

++

увеличение на 1(инкремент)

--

уменьшение на 1(декремент)1

sizeof

размер

~

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

!

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

-

арифметическое отрицание (унарный минус)

+

унарный плюс

&

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

*

разадресация

new

выделение памяти

delete

освобождение памяти

(type)

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

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

*

умножение

/

деление

%

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

+

сложение

-

вычитание

«

сдвиг влево

»

сдвиг вправо

<

меньше

<=

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

>

больше

>=

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

= =

равно

!=

не равно

&

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

^

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

|

поразрядная дизъюнкция (ИЛИ)

&&

логическое И

||

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

?:

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

=

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

*=

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

/=

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

%=

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

+=

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

-=

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

«=

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

»=

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

&=

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

|=

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

^=

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

.

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

Рассмотрим некоторые основные операции подробнее.

Операция инкремент. Эта операция имеют две формы записи - префиксную, когда операция записывается перед операндом(++x), и постфиксную(x++). В префиксной форме сначала выполняется операция ++, а затем выполняется контекстная операция, а в постфиксной -наоборот.

Пример.

#include <iostream.h>

int main(){

int x = 3, y = 3,z=3,a,b;

a=++x*y;

b=y++*z;

cout<<"a= “<<a<<” b=”<<b<<” x=”<<x<<” y=”<<y;

return 0;

}

Результат работы программы:

a= 12 b=9 x=4 y=4

Аналогично для операций- предекремент/постдекремент.

Операция определения размера sizeof предназначена для вычисления размера объекта или типа в байтах, и имеет две формы:

sizeof выражение

sizeof ( тип )

Пример:

#include <iostream.h>

int main ( ){

float х = 1;

cout << "sizeof(float) :" << sizeof(float);

cout << "\nsizeof х :" << sizeof х;

cout << "\nsizeof (х + 1.0) :" << sizeof (х + 1.0);

return 0;

}

Результат работы программы:

sizeof (float) : 4

sizeof х : 4

sizeof (х + 1.0) : 8

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

Деление (/) и остаток от деления (%). Операция деления применима к операндам арифметического типа. Если оба операнда целочисленные, результат операции округляется до целого числа, в противном случае тип результата определяется правилами преобразования. Операция остатка от деления применяется только к целочисленным операндам. Знак результата зависит от реализации.

#include <iostream.h>

int main{

int х = 5, у = 2,a,b;

float z = 2,t;

a=x/y;

t=x/z;

b=x%y;

cout<<”a=”<<a<<” t=”<<t<<” b=”<<b;

return 0;

}

Результат работы программы:

a=2 t=2.5 b=1

Операции отношения (<, <=, >, >=, = =, ! =) сравнивают первый операнд со вто­рым. Операнды могут быть арифметического типа или указателями. Результатом операции является значение true или false (любое значение, не равное нулю, ин­терпретируется как true). Операции сравнения на равенство и неравенство име­ют меньший приоритет, чем остальные операции сравнения.

Логические операции (&& и ||). Результатом логической операции является true или false. Результат операции && имеет значение true, только если оба операнда имеют значение true. Результат операции || имеет значение true, если хотя бы один из операндов имеет значение true. Логические операции выполняются слева напра­во. Если значения первого операнда достаточно, чтобы определить результат операции, второй операнд не вычисляется.

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

Операции выполняются в соответствии с приоритетами. Для изменения порядка выполнения операций используются круглые скобки. Если в одном выражении за­писано несколько операций одинакового приоритета, унарные операции, условная операция и операции присваивания выполняются справа налево, остальные - сле­ва направо. Например, а = b = с означает а = (b = с), а а + b + с означает (а + b) + с. Допустимы выражения вида

а = b = с: сначала вычисляется выражение b = с, а затем его результат становится правым операндом для операции присваивания переменной а.

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]