Операции увеличения и уменьшения
Операция увеличения увеличивает значение переменной на минимальный атом. Операция уменьшения уменьшает значение переменной на минимальный атом. Операция увеличения записывается с помощью двух знаков сложения ++, операция уменьшения - с помощью двух минусов --.
Операции увеличения и уменьшения применимы для целочисленных переменных (минимальный атом равен 1) и для указателей (минимальный атом равен размеру одного элемента на который ссылается указатель). Операции увеличения и уменьшения нельзя применять к вещественным переменным.
Например, операция ++, примененная к целочисленной переменной i, увеличивает ее значение на единицу.
Операции увеличения ++ и уменьшения -- на единицу имеют префиксную и суффиксную формы. В префиксной форме операция записывается перед переменной. В суффиксной форме операция записывается после переменной:
++x; // Префиксная форма
x--; // Суффиксная форма
Если используется префиксная форма операции ++, то сначала переменная увеличивается, и только после этого ее новое значение используется в выражении. При использовании суффиксной формы значение переменной сначала используется в выражении и только затем увеличивается. Например,
int x = 5, y = 5, a, b;
a = (++x) + 2; // переменной a присваивается значение 8
b = (y++) + 2; // переменной b присваивается значение 7
Операции сравнения
Операция сравнения сравнивает два выражения. В результате вырабатывается логическое значение - 1 или 0 (истина или ложь) в зависимости от значений выражений.
Операции сравнения в Си обозначаются следующим образом:
== равно, != не равно,
> больше, >= больше или равно,
< меньше, <= меньше или равно.
Примеры:
int res;
int x, y;
res = (x == y); // истинна, если x равно y, иначе ложь
res = (x == x); // всегда истинна
res = (2 < 1); // всегда ложь
Логические операции
В Си используются следующие логические операции:
· || логическое "или" (логическое сложение)
· && логическое "и" (логическое умножение)
· ! логическое "не" (логическое отрицание)
Примеры логических выражений:
int a, b, c, d ,x, y;
a = b || c; // логическое "или"
d = b && c; // логическое "и"
a = !b; // логическое "не"
a = (x == y); // сравнение в правой части
c = (x > 0) && (y != 1); // c истинно, когда оба сравнения истинны
Самый высокий приоритет у операции логического отрицания, затем следует логическое умножение, самый низкий приоритет у логического сложения.
Побитовые логические операции
Кроме обычных логических операций, в Си имеются побитовые логические операции, которые выполняются независимо для каждого отдельного бита операндов. Определены следующие побитовые логические операции:
· & побитовое логическое умножение ("и")
· | побитовое логическое сложение ("или")
· ~ побитовое логическое отрицание ("не")
· ^ побитовое сложение по модулю 2 (исключающее "или")
Приоритеты побитовых операций в Си такие же, как у соответствующих логических операций.
Операции сдвига
Операции сдвига применяются к целочисленным переменным: двоичный код числа сдвигается вправо или влево на указанное количество позиций. Сдвиг вправо обозначается двумя символами "больше" >>, сдвиг влево - двумя символами "меньше" <<.
При сдвиге влево на k позиций младшие k разрядов результата устанавливаются в ноль. Сдвиг влево на k позиций эквивалентен умножению на число 2k.
Сдвиг вправо по-разному определяется для беззнаковых и знаковых чисел. При сдвиге вправо беззнакового числа на k позиций освободившиеся k старших разрядов устанавливаются в ноль.
При сдвиге вправо чисел со знаком происходит так называемое "расширение знакового разряда". Если число неотрицательно, т.е. старший, или знаковый, разряд числа равен нулю, то происходит обычный сдвиг, как и в случае беззнаковых чисел. Если же число отрицательное, т.е. его старший разряд равен единице, то освободившиеся в результате сдвига k старших разрядов устанавливаются в единицу. Число, таким образом, остается отрицательным.
Сдвиг вправо на k позиций соответствует целочисленному делению на число 2k. При k = 1 это соответствует делению на 2 только для отрицательных чисел, не равных -1. Для числа -1, все биты двоичного кода которого равны единице, сдвиг вправо не приводит к его изменению.
3.3.8.Операции "увеличить на", "домножить на" и т.п.
В большинстве алгоритмов при выполнении операции сложения чаще всего переменная-результат операции совпадает с первым аргументом:
x = x + y;
Здесь складываются значения двух переменных x и y, результат помещается в первую переменную x. Таким образом, значение переменной x увеличивается на значение y.
В Си существует сокращенная запись операции увеличения:
s += y;
Оператор += читается как "увеличить на".
Подобные операторы существуют для любых операций, допустимой в Си. Например, для арифметических операций +, -, *, /, % можно использовать операции
+= увеличить на
-= уменьшить на
*= домножить на
/= поделить на
%= поделить с остатком на
Для логических операций можно использовать операторы &&= и ||=.