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

52

Глава 4. Операторы. Ключевые слова

Ниже приведен справочный материал по языку C++.

4.1. Операторы

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

Арифметические операторы языка C++, такие как сложение, умножение, похожи на соответствующие математические действия. Но есть операторы, не имеющие прямой аналогии в математике, например, вызов функции (), доступ к элементу массива [].

Унарные операторы

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

Таблица 16. Унарные операторы

Знак

Операция

Пример

Значение

оператора

 

выражения

выражения

Унарный минус

-(-1)

1

+

Унарный плюс

+(-1)

-1

~

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

~(0)

-1

!

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

!(0)

1

sizeof

Размер объекта в байтах

sizeof(char)

1

(тип)

Приведение типа

(int)1.0

1

тип()

 

int(1.0)

1

*

Доступ к объекту по указателю

*p

 

&

Вычисление адреса

&x

адрес x

new

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

p=new char

 

delete

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

delete p

 

++

Увеличение на единицу

++k; k++

 

––

Уменьшение на единицу

– – k, k– –

 

Оператор ++ увеличивает свой операнд на 1, а оператор – – уменьшает на 1. Данные операторы могут быть префиксными (приставочными) и постфиксными (суффиксными). Если оператор стоит

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

 

Операторы. Ключевые слова 53

int i = 1, j = 1, n, m;

 

n = ++i;

// i = 2, n = 2

Если оператор стоит после операнда, то в вычислениях

используется начальное значение операнда, а затем его значение изменяется, например,

m = j– – ; // m = 1, j = 0

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

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

Таблица 18. Бинарные операторы

Знак

Операция

Пример

Значение

оператора

 

выражения

выражения

*

Умножение

(–1) * (–1)

1

/

Деление

3 / 2

1

 

 

3.0 / 2.0

1.5

%

Вычисление остатка

3 % 2

1

+

Сложение

3 + 2

5

Вычитание

3 – 2

1

<

Меньше

3 < 2

0

>

Больше

3 > 2

1

<=

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

3 <= 2

0

>=

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

3 >= 2

1

==

Тождество

3 == 2

0

!=

Не равно

3 != 2

1

<<

Сдвиг влево

3 << 2

12

>>

Сдвиг вправо

7 >> 2

1

&

Побитовое И

3 & 2

2

|

Побитовое ИЛИ

3 | 2

3

^

Побитовое

3 ^2

1

 

исключающее ИЛИ

 

 

&&

Логическое И

3 && 2

1

||

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

3 || 2

1

,

Запятая

(1, 2, 2+1)

3

Оператор запятая

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

54 4

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

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

Условное выражение

Оператор условного выражения – единственный, требующий трех операндов. Для его обозначения используются знак вопроса и двоеточие (? :). Условное выражение имеет вид:

a ? b : c;

Если a есть истина (не нуль), то результатом всего выражения будет значение выражения b, иначе результатом будет значение выражения c. Например, в следующей инструкции переменной max присваивается максимум из x и y:

max = x > y ? x : y;

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

В языке C++, кроме обычного оператора присваивания, обозначаемого одним знаком =, существуют операторы присваивания, совмещенные с основными операциями, табл. 19. Они позволяют писать инструкции вида:

a = a + b;

в более краткой форме a+= b;

Таблица 19. Операторы присваивания

Знак

Выполняемое действие

Примеры

Значе-

оператора

 

выражений

ние k

=

Простое присваивание

k = 2

2

+=

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

k+=2

4

–=

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

k–=2

2

*=

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

k*=3

6

/=

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

k/=2

3

%=

Вычисление остатка и присваивание

k%=2

1

<<=

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

k<<=2

4

>>=

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

k>>=2

1

&=

Побитовое И и присваивание

k&=2

0

|=

Побитовое ИЛИ и присваивание

k|=2

2

^=

Побитовое исключающее ИЛИ и

k^=2

0

 

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

 

 

Операторы. Ключевые слова 55

4.2. Приоритеты операторов

В языке C++ операторы выполняются в очередности, определяемой их приоритетом. Всего существует 16 приоритетов операторов. В табл.20 перечислены операторы в порядке убывания их приоритетов.

Таблица 20. Приоритеты и порядок выполнения операторов

Прио-

Знаки операторов

Тип операторов

Порядок вы-

ритет

 

 

полнения

1() [] . -> Вызов функции, выбор Слева направо

 

 

 

 

 

 

элемента массива,

 

 

 

 

 

 

 

 

доступ к члену

 

 

 

 

 

 

 

 

структуры

 

 

 

2

– ~ !

*

&

++

Одноместные с одним

Справа налево

 

 

 

–– sizeof

(тип)

тип()

операндом

 

 

 

3

.*

->*

 

Доступ к члену класса

Слева направо

 

 

 

 

 

 

 

через указатель

 

 

 

4

*

/

%

Умножение, деление,

Слева направо

 

 

 

 

 

 

 

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

 

 

 

5

+

 

 

Сложение, вычитание

Слева направо

 

 

6

<< >>

 

Сдвиг влево и вправо

Слева направо

 

 

7

< > <= >=

Отношение

Слева направо

 

 

 

 

 

 

 

(неравенство)

 

 

 

8

==

 

!=

 

Отношение (равно, не

Слева направо

 

 

 

 

 

 

 

равно)

 

 

 

9

 

&

 

 

Побитовое И

Слева направо

 

 

10

 

^

 

 

Побитовое

Слева направо

 

 

 

 

 

 

 

исключающее ИЛИ

 

 

 

11

 

|

 

 

Побитовое ИЛИ

Слева направо

 

 

12

&&

 

 

Логическое И

Слева направо

 

 

13

 

||

 

 

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

Слева направо

 

 

14

? :

 

 

Условная

Справа налево

 

 

15

= *= /= %= += -=

Простое и составное

Справа налево

 

 

 

<<= >>= &= |= ^=

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

 

 

 

16

 

,

 

 

Последовательное

Слева направо

 

 

 

 

 

 

 

вычисление

 

 

При вычислении выражений сначала выполняются операторы, заключенные в самые внутренние круглые скобки. Если скобок нет, то сначала выполняются операторы с более высоким приоритетом. В случае одинакового приоритета операторы выполняются либо слева направо, либо справа налево. Например, арифметические операторы выполняются

слева направо. Инструкция a = b + c + d + e;