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

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

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

Все приведенные в таблице операции, кроме условной и sizeof, могут быть перегружены.

Таблица 2.1.

Основные операции языка С++

Операция Краткое описание
Унарные операции
++ -- sizeof ~ ! - + & * new delete (type) увеличение на 1 уменьшение на 1 размер поразрядное отрицание логическое отрицание арифметическое отрицание (унарный минус) унарный плюс взятие адреса разадресация выделение памяти освобождение памяти преобразование типа
Бинарные и тернарная операции
* / % умножение деление остаток от деления
+ - сложение вычитание
<< >> сдвиг влево сдвиг вправо
< <= > >= меньше меньше или равно больше больше или равно
== != равно не равно  
& поразрядная конъюнкция (И)
^ поразрядное исключающее ИЛИ
| поразрядная дизъюнкция (ИЛИ)
&& логическое И
|| логическое ИЛИ
? : условная операция (тернарная)
= *= /= %= += -= <<= >>= &= != ^= присваивание умножение с присваиванием деление с присваиванием остаток отделения с присваиванием сложение с присваиванием вычитание с присваиванием сдвиг влево с присваиванием сдвиг вправо с присваиванием поразрядное И с присваиванием поразрядное ИЛИ с присваиванием поразрядное исключающее ИЛИ с присваиванием
, последовательное вычисление

Пробелы между символами внутри операции не допускаются.

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

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

#include <stdio.h>

int main(){

int x = 3, у = 3;

printf ("Значение префиксного выражения: %d\n", ++х);

printf ("Значение постфиксного выражения: %d\n", у++);

printf("Значение х после приращения: %d\n", х);

printf ("Значение у после приращения: %d\n", у);

return 0;

}

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

Значение префиксного выражения: 4

Значение постфиксного выражения: 3

Значение х после приращения: 4

Значение у после приращения: 4

Операндом операции инкремента в общем случае является так называемое L-значение (L-value). Так обозначается любое выражение, адресующее некоторый участок памяти, в который можно занести значение. Название произошло от операции присваивания, поскольку именно ее левая (Left) часть определяет, в какую область памяти будет занесен результат операции. Переменная является частным случаем L-значения.

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

sizeofвыражение

sizeof( тип )

Пример:

#include <iostream.h>

int main(){

float x = 1;

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

cout << “\nsizeof x :" << sizeof x;

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

return 0;

}

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

sizeof (float) : 4

sizeof x : 4

sizeof (x + 1.0) : 8

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

Операции отрицания (-, ! и ~).Арифметическое отрицание (унарный минус -) изменяет знак операнда целого или вещественного типа на противоположный. Логическое отрицание (!) дает в результате значение 0, если операнд есть истина (не нуль), и значение 1, если операнд равен нулю. Операнд должен быть целого или вещественного типа, а может иметь также тип указатель. Поразрядное отрицание (~), часто называемое побитовым, инвертирует каждый разряд в двоичном представлении целочисленного операнда.

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

#include <stdio.h>

int main(){

int x = 11, у = 4;

float z = 4;

printf("Результаты деления: %d %f\n", x/y, x/z);

printf("Остаток: %d\n", x%y);

return 0;

}

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

Результаты деления: 2 2.750000

Остаток: 3

Операции сдвига(<< и >>) применяются к целочисленным операндам. Они сдвигают двоичное представление первого операнда влево или вправо на количество двоичных разрядов, заданное вторым операндом. При сдвиге влево (<<) освободившиеся разряды обнуляются. При сдвиге вправо (>>) освободившиеся биты заполняются нулями, если первый операнд беззнакового типа, и знаковым разрядом в противном случае. Операции сдвига не учитывают переполнение и потерю значимости.

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

Поразрядные операции(&, |, ^) применяются только к целочисленным операндам и работают с их двоичными представлениями. При выполнении операций операнды сопоставляются побитово (первый бит первого операнда с первым битом второго, второй бит первого операнда со вторым битом второго, и т д.).

При поразрядной конъюнкции, или поразрядном И (операция обозначается &) бит результата равен 1 только тогда, когда соответствующие биты обоих операндов равны 1.

При поразрядной дизъюнкции или поразрядном ИЛИ (операция обозначается |) бит результата равен 1 тогда, когда соответствующий бит хотя бы одного из операндов равен 1.

При поразрядном исключающем ИЛИ (операция обозначается ^) бит результата равен 1 только тогда, когда соответствующий бит только одного из операндов равен 1.

#include <iostream.h>

int main(){

cout << "\n 6 & 5 = "<< (6 & 5);

cout << "\n 6|5 = " << (6 | 5);

cout<< "\n 6 ^ 5 = " << (6^5);

return 0;

}

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

6 & 5 = 4 //101 сравниваем с 110, получаем 100(2) = 4(10)

6 | 5 = 7 //101 сравниваем с 110, получаем 111(2) = 7(10)

6^5 = 3 //101 сравниваем с 110, получаем 011(2) = 3(10)

Логические операции (&& и||). Операнды логических операций И (&&) и ИЛИ (||) могут иметь арифметический тип или быть указателями, при этом операнды в каждой операции могут быть различных типов. Преобразования типов не производятся, каждый операнд оценивается с точки зрения его эквивалентности нулю (операнд, равный нулю, рассматривается как false,не равный нулю – как true).

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

Операции присваивания (=, +=, *= ит. д.).Операции присваивания могут использоваться в программе как законченные операторы.

Формат операции простого присваивания (=):

операнд_1 = операнд_2

Первый операнд должен быть L-значением, второй – выражением. Сначала вычисляется выражение, стоящее в правой части операции, а потом его результат записывается в область памяти, указанную в левой части (мнемоническое правило: «присваивание – это передача данных "налево"»). То, что ранее хранилось в этой области памяти, естественно, теряется.

#include <iostream.h>

int main(){

int а = 3, b = 5, с = 7;

а = b; b = а; с = с + 1;

cout << "а = " << а;

cout << "\t b = " << b;

cout << "\t с = " << с;

return 0:

}

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

а=5 b=5 с=8

При присваивании производится преобразование типа выражения к типу L-значения, что может привести к потере информации.

В сложных операциях присваивания (+=, *=, /= и т п.) при вычислении выражения, стоящего в правой части, используется и L-значение из левой части. Например, при сложении с присваиванием ко второму операнду прибавляется первый, и результат записывается в первый операнд, то есть выражение а += b является более компактной записью выражения a = а + b.

Условная операция(?:). Эта операция тернарная, то есть имеет три операнда. Ее формат:

операнд_1 ? операнд_2 : операнд_3

Первый операнд может иметь арифметический тип или быть указателем. Он оценивается с точки зрения его эквивалентности нулю (операнд, равный нулю, рассматривается как false,не равный нулю – как true).Если результат вычисления операнда 1равен true,то результатом условной операции будет значение второго операнда, иначе – третьего операнда. Вычисляется всегда либо второй операнд, либо третий. Их тип может различаться. Условная операция является сокращенной формой условного оператора if.


#include <stdio.h>

int main(){

int a = 11, b = 4, max;

max = (b > a)? b : a;

printf("Наибольшее число: %d", max);

return 0;

}

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

Наибольшее число: 11

Другой пример применения условной операции. Требуется, чтобы некоторая целая величина увеличивалась на 1, если ее значение не превышает n, а иначе принимала значение 1:

i = (i < n) ? i + 1: 1;

He рассмотренные в этом разделе операции будут описаны позже.








Дата добавления: 2015-10-09; просмотров: 1120;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.021 сек.