Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Итог_Пособие C++.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.03 Mб
Скачать

1.4. Выражения. Преобразование типов

Выражения являются составной частью всех основных операторов С++, кроме того, имеется отдельный оператор-выражение для выполнения вычислений и присваиваний. Он представляет собой выражение с завершающей точкой с запятой.

1.4.1 Операнды и операции

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

Рассмотрим операции над простыми типами данных. Они могут быть унарными (требуется только один операнд), бинарными (два операнда) и даже тернарными (три операнда).

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

+ (плюс – унарный и бинарный)

- (минус – унарный и бинарный)

* (умножение)

/ (деление)

Следует заметить, что целое деление дает целый результат, при этом дробная часть усекается: 8 / 3 есть 2. Над целыми может выполняться операция % получения остатка: 11 % 4 равно 3, а 1 % 4 равно 1 (1 / 4 равно 0).

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

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

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

! (логическое НЕ – унарная операция)

В языке C++ логические операции могут быть применены ко всем целочисленным типам, а не только к типу bool. При этом все нулевые значения трактуются как false, а значения, отличные от нуля, – true.

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

& (поразрядная операция И). Например, 3 & 5 = 1 (в двоичной системе 011 & 101 = 001).

| (поразрядная ИЛИ). Например, 3 | 5 = 7.

^ (исключающее ИЛИ). Например, 3 ^ 5 = 6.

<< (сдвиг операнда влево на заданное число разрядов). Например, 3 << 2 = 12.

>> (сдвиг операнда вправо на заданное число разрядов). Например, 3 >> 1 = 1.

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

== (два подряд идущих знака равно – сравнение на равенство)

!= (не равно)

< (меньше)

> (больше)

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

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

В C++ есть операция присваивания =, а не оператор присваивания, как в некоторых других языках, например, Pascal. Операция не только присваивает значение справа левому операнду, но и возвращает это значение. Таким образом, присваивание может встречаться в неожиданном контексте; например, x=3*(a=2*x); - в результате новое значение получит не только переменная x, но и переменная a (однако, не рекомендуется злоупотреблять подобными конструкциями). Выражение a=b=c; означает присвоение c сначала переменной b, а затем переменной a.

Другим свойством операции присваивания является то, что она может совмещаться с большинством бинарных операций – получаются составные операции: +=, -=, *=, /=, %=

Например, выражение x+=2 равносильно x=x+2.

Операция запятая (‘,’) – операция последовательного вычисления. Вычисляет значение левого и правого операнда, при этом возвращает значение правого операнда. Например:

c=(a=8,9);

В a будет помешено значение 8, в c – значение 9 (не рекомендуем использовать подобные конструкции). Заметим, что если вы имели в виду число 8.9, но случайно поставили запятую вместо точки, то сообщения об ошибке не будет выведено.

Операции -- и ++ - декремент и инкремент – уменьшают или увеличивают значение аргумента на 1. Могут быть записаны как перед операндом (префиксная форма), так и после операнда (постфиксная форма). Если знак операции записан перед операндом, то изменение операнда происходит до его использования в выражении, если после операнда – после его использования. Например:

x=3; a=++x; //a=4, x=4

x=3; a=x++; //a=3, x=4

Ещё пример:

x=3; a=++x+ ++x; //a=10, x=5

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

Операция sizeof(объект) – возвращает размер в байтах того объекта, к которому применяется (объектом может быть тип или переменная ).

В большинстве программ на C++ широко применяются указатели. Указатель – это переменная, содержащая адрес другой переменной. Унарная операция * разыменовывает указатель, т.е. *p есть объект, на который указывает p. Эта операция также называется косвенной адресацией. Например, если имеется объявление char* p, то *p есть символ, на который указывает p. Операция, противоположная разыменованию – получение адреса (&).Об указателях в C++ мы ещё поговорим подробнее.

В языке C++ имеется одна тернарная операция (с тремя аргументами) – условная операция, которая имеет следующий формат:

операнд1 ? операнд2 : операнд3

Операнд1 в данной операции задаёт условие. Если имеет значение true, то результатом операции будет являться значение операнда 2, иначе – операнда 3. Например, x=(a>0)?1:-1; - переменная x получит значение 1 или -1 в зависимости от значения переменной a. В данном примере скобки, в которые заключается условие, не являются обязательными, но с ними текст получается более наглядным.

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