В С++ имеется большое число операций, которые используются для построения выражений. Операндами выражений являются константы, переменные, другие выражения(например, выражения в круглых скобках или вызовы функций). Смысл операции зависит от числа операндов и типа операндов: например, выражение ' -a ' есть унарная операция (имеющая один операнд) смены знака переменной с именем а, а выражение ' a + b ' есть бинарная операция сложения. Вычисления в выражениях выполняются в соответствии с приоритетами операций. Для изменения приоритета операция используют операцию () - круглые скобки. Ниже приведены классы основных операций в порядке возрастания приоритета.
1. Операции присваивания или присваивания с вычислением = | += | -= | *= | /= | %= | >>= | <<=
Примеры int a,b,c,d ; a = 0; a = b = c = d = 100; a += 5; // a=a+5; b <<= d; // b << d;
2. Логическая операция 'или' ( || ). Если хотя бы один из операндов имеет значение 'истина' (true, не 0, не пустая строка ), то результат 'истина'
Примеры d = 1 ; a = 0 || d ; // a=true bool t = false; a = 0 || t ; // a=false
3. Логическая операция 'и' ( && ). Если оба операнда имеет значение 'истина' (true, не 0, не пустая строка ), то результат 'истина'
Примеры d = 1 ; a = 0 && d ; // a=false bool t = true; a = 1 || t ; // a=true
4. Поразрядная операция 'или'. Если соответствующий разряд хотя бы одного из операндов имеет значение 1, то соответствующий разрад результат есть 1.
Пример unsigned char c1 = 5 ; // 0000 0101 unsigned char c2 = 15 ; // 0000 1111 unsigned char c3 = c1 | c2; // 0000 1111
5. Поразрядная операция 'исключающее или'. Если соответствующий разряды операндов имеет разные значения, то соответствующий разрад результат есть 1.
Пример unsigned char c1 = 5 ; // 0000 0101 unsigned char c2 = 15 ; // 0000 1111 unsigned char c3 = c1 ^ c2; // 0000 1010
6. Поразрядная операция 'и'. Если соответствующие разряды операндов имеет значение 1, то соответствующий разрад результат есть 1.
Пример unsigned char c1 = 5 ; // 0000 0101 unsigned char c2 = 15 ; // 0000 1111 unsigned char c3 = c1 | c2; // 0000 0101
7. Операции сравнения != | == . Результат операции - логическон значение
Пример unsigned char c1 = 5 ; unsigned char c2 = 15 ; bool t = c1 == c2 ; // false t = c1 != c2 ; // true
8. Операции сравнения > | < | >= | <= . Результат операции - логическон значение
Пример unsigned char c1 = 5 ; unsigned char c2 = 15 ; bool t = c1 > c2 ; // false t = c1 <= c2 ; // true
9. Операции сдвига >> | <<. Второй операнд определяет количество разрядов, на которые сдвигается первый операнд влево (<<) или вправо (>>). Сдвиг на один разряд влево - умножение целого значения на 2, вправо - деление на 2.
Пример int i = 64; int res = i << 2; // res = 254 i = 512; res = i >> 3; // res = 64
10. Арифметические операции + | -
11. Арифметические операции * | / | %
Пример int i = 64; int j = 10; int res = i / j; // res = 6; res = i % j; // res = 4; double j_ = 10; double res_ = i / j_; // res = 6.4;
12. Унарные операции !(отрицание) | + | -
Пример int i1 = 100, j1 = -1; i1 = !i1; // i1 = 0; j1 = !j1; // j1 = 0;
13. Операции инкремента и декремента ++ | -- изменяют значение переменой на 1.
Пример int i1 = 100, j1 = -1; i1++; // i1=101 ++j1; // j1=0 ++++++i1; // i1=104 любое количество префиксных операцтй ++ или -- допустимо i1++++; // недопустимо! постфиксная операция ++ или -- может быть только одна int res; res = ++i1 + j1--; // исх. знач. i1 = 104 j1 =0 // рез. знач. i1 = 105 j1 =-1 res = 105 // i1 измен. до вычисл. рез-та, j1-после выч. рез-та
Замечания.
1. Операции | ~ ( дополнение ) , & ( И ) , ^ ( исключающее ИЛИ ) , ! ( отрицание) , << ( логический сдвиг влево ) , >> ( логический сдвиг вправо ) |
применяются к целым типам, и нет отдельного типа данных для логических действий.
2. Инфиксные и постфиксные операции ++ ( инкремент ) и -- ( декремент ) применяются только к переменным, но не к выражениям.