19 сентября 2010 в 19:39
Операции c++
Здесь будут рассмотрены все операции языка C++. Можете использовать данный материал как справочник по операциям. Пока что, перечислены не все. Постепенно буду добавлять оставшиеся.
Сначала несколько определений.
Значения участвующие в операциях называются операндами.
Операциии будем рассматривать в порядке возрастания их приоритета: от низшего к высшему.
Приоритет операций
Итак, каждая операция в языке C++ обладает приоритетом. Приоритет определяет, в какой последовательности будут выполняться операции в выражении.
Не забываем, что оператор в C++ - это строка кода заканчивающаяся точкой с запятой. Не путайте операторы, операции и операнды.
Возьмём например следующий оператор:
y = x + 5;
Здесь выполняются две операции: операция сложения и операция присваивания. Так вот операция суммы обладает более высоким приоритетом, чем операция присваивания. Поэтому сначала вычисляется сумма x и пяти, а затем получившийся результат присваивается переменной y.
Ассоциативность
Ассоциативность бывает двух видов: ассоциативность операций слева направо и ассоциативность операций справа налево.
Ассоциативность операций применяется когда в выражении встречаются две операции обладающие одинаковым приоритетом:
y = x + z + 5;
Операция суммы обладает ассоциативностью слева направо. Это значит, что сначала выполнится самая левая операция, затем выполнится следующия и так далее до самой правой.
Операция присваивания обладает ассоциативностью справа налево:
y = x = z = 5;
Сначала выполнится самя правая операция: z = 5, затем результат этой операции будет присвоен x и т.д.
Возвращаемое значение
Каждая операция возвращает какое-то значение.
5 + 2
Данная операция вернёт семь. Ещё один пример:
y = 5 + (x = 3);
Сначала выполняется операция присваивания находящаяся в скобках, она возвращает значение 3. Далее, это возвращённое значение участвует в операции суммы в качестве правого операнда. Операция суммы возвращает значение 8. Результат операции сложения участвует в операции присваивания.
Значением не обязательно является целое число. Некоторые операции возвращают булевы значения:
x == 5;
Если x равно пяти, то данная операция вернёт единицу (или true), в противном случае операция вернёт 0 (или false).
Количество операндов
По количеству участвующих операндов, операции делятся на три группы: унарные - в операции один операнд.
Бинарные - в операции участвуют два операнда.
В языке C++ всего одна операция которая принимает три операнда - условная операция. Операции с тремя операндами называются тернарными.
Ну и собственно сами операции. Здесь перечислены почти все операции. Постепенно допишу остальные. Для каждой операции указан приоритет.
Приоритет | Операция | Описание |
17 | :: | контекст |
16 | -> | операция непрямого доступа к членам класса |
16 | . | операция точки (доступ к полю) |
16 | [] | индекс массива |
16 | () | вызов функции |
15 | ++ -- | инкремент и декремент |
15 | ~ | поразрядное НЕ |
15 | ! | логическое НЕ |
15 | - | унарный минус |
15 | * | операция разыменования |
15 | new delete | выделение памяти из кучи |
14 | .* | доступ к указателю-члену |
13 | * / % | умножение, деление и взятие остатка |
12 | + - | сложение и вычитание |
11 | >> << | поразрядный сдвиг вправо и влево |
10 | > >= <= < | условные операции |
9 | == != | операции проверки на равенство |
8 | & | поразрядное И |
7 | ^ | поразрядное исключающее ИЛИ |
6 | | | поразрядное ИЛИ |
5 | && | логическое И |
4 | || | логическое ИЛИ |
3 | ?: | условная операция |
2 | = *= /= %= += -= | операции присваивания |
2 | <<= >>= | поразрядные операции сдвига с присваиванием |
2 | &= |= ^= | поразрядные логическоие операции с присваиванием |
1 | , | запятая |
Обратите внимание, что многие операции обладают одинаковы приоритетом.
Ниже подробно рассмотрены операции, используемые наиболее часто.
Операция присваивания
Левым операндом должна быть переменная. Нельзя записать:
5 = x;
Операнду находящемуся в левой части присваивается значение операнда стоящего в правой части операции:
x = 5;
cout << x; // на экран будет выведено: 5
Теперь в переменной x хранится значение 5. И его можно использовать.
Арифметические операции с присваиванием
Данные операции позволяют сократить код:
int x = 5;
x += 5; // две последние строки эквивалентны
x = x + 5;
Арифметические операции с присваиванием используются когда необходимо внести изменения в переменную используюя при этом значение, которое хранится в этой переменной в данный момент.
Условная операция
Условная операция ?: - единственная тернарная (то есть принимающая три операнда) операция в C++. Использовать её можно вместо простого ветвления if else.
x > y ? flag = 1 : flag = 0;
В первом операнде записывается условная операция. Если она возвращает единицу, то выполняется второй операнд, если ноль, то выполняется третий операнд. Приведённый код эквивалентен следующему:
if (x > y) { flag = 1; } else { flag = 0; }
Логические операции
|| - логическое ИЛИ, && - логическое И. Операция логического И обладает более высоким приоритетом.
Данные операции используются для объединения нескольких условных операций:
if (x = y) { if (z > x) { } }
Вот вместо этой чудовищной конструкции можно использовать следующую:
if ((x == y) && (x < z)) { }
Только когда выполняются два условия, выполняется и тело ветвления.
Операция || работает аналогично:
if ((x == y) || (x < z)) { }
Тело ветвления выполняется, когда выполняется любое из условий, т.е. если выполняется хоть одно условие.
Поразрядные логические операции
| ^ &. Здесь перечислены операции в порядке увеличения их приоритета.
Поразрядные логические операции в отличие от логических возвращают значения такого же типа, как и их операнды.
При выполнении этих операций вычисления ведутся над двоичным представлением операндов.
Рассмотрим пример: возьмём два десятичных числа:
x = 180; // 10110100
y = 166; // 10100110
В комментариях указано как эти числа представлены в двоичном виде.
Теперь выполним три поразрядные логические операции над этими числами:
x | y; // 182
10110100
10100110
--------
10110110
Здесь мы проверяем, если в одном из чисел в данной позиции стоит единица, то и в результирующем числе будет единица.
x ^ y; // 18
10110100
10100110
--------
00010010
В исключающем ИЛИ в результирующее число записывается единица, если единица стояла только в одном числе. Если в обоих числах в соответствующих позициях стояла единица, то в результат записывается ноль. Если в обоих числах в соответствующих позициях стоял ноль, в результате тоже будет ноль.
x & y; // 164
10110100
10100110
--------
10100100
В результат записывается единница только если в обоих числах была единица.
Вообще при выполении данных операций не имеет смысла смотреть на десятичное представление чисел. Мы не будем рассматривать для чего конкретно нужны эти операции.
Операция проверки на равенство (неравенство)
Операции отношения могут возвращать только два значения: ноль (false - ложь) и единицу (true - истина).
== и !=. Данные операции возвращают булевы значения.
x == y;
Если x равен y, то операция вернёт единицу.
x != y;
Операция вернёт единицу если x не равен y.
Более высокий приоритет у операций < (меньше), <= (меньше или равно), > (больше), >= (больше или равно). Думаю тут всё понятно. Только запомните что в операциях больше или равно и меньше или равно сначала пишется угловая скобка, а затем знак равенства. Следущий знак в C++ не имеет смысла: =<.
Арифметические операции
Приоритет этих операции такой же как и в математике. Операции умножения, деления выполняются раньше чем операции суммы, вычитания.
Для операции умножения в C++ используется знак *.
Кроме того сюда же относится операция взятия остатка %. Данная операция делит первый операнд на второй и берёт остаток от деления:
int x = 3; int y = 10; int z; z = x % y; // z = 3
Мы делим три на десять. Результат - 0,3. Отбрасываем ноль и берём остаток. Результат - 3.
Данная операция хоть и не так распространена как например другие арифметические операции, но тем не менее используется довольно часто. И иногда бывает просто незаменима.
Операции new и delete
Операция new позволяет получить память из кучи (это такой участок памяти) во время выполнения программы. При этом Вы получаете указатель на начало участка выделенной памяти.
После того, как память которую вы получили больше вам не нужна, необходимо её "отпустить". Делается это с помощью операции delete.
Инкремент и декремент
Инкремент - увеличение переменной на единицу. Новое значение сохраняется в переменной.
Декремент - уменьшение переменной на единицу. Новое значение сохраняется в переменной.
Различают два вида этих операций: операции преинкремента и предекремента и операции постинкремента и посткинкремента.
int x = 5; int y; y = ++x; // y = 6, x = 6 y = --x; // y = 5, x = 5 y = x++; // y = 5, x = 6 y = x--; // y = 6, x = 5
Опишу ситуацию для инкремента.
При преникременте (плюсы стоят перед переменной), сначала происходит увеличение переменной на единицу, и потом это увеличенное значение участвует в выражении.
При постинкременте (плюсы стоят после переменной) переменная сначала участвует в выражении, а только затем она увеличивается.
Предекремент и предекремент работают точно также.
Именно операция постинкремента используется в названии языка C++ - т.е. увеличенный на единицу C.
Ну и ещё одна операция. У неё приоритет ниже чем у инкремента. Логическое НЕ. Обозначается восклицательным знаком - !. Восклицательнй знак можно использовать как частицу "не": !0 - не ноль. Часто используется в условных операторах и над переменными типа bool.
4 октября 2016 в 11:28
Thus there to think of applying for women shttp://games10v.com/ , women s viagra their home office as tomorrow.
авторизуйтесь
или войдите через