Над объектами в языке Си могут выполняться различные операции:
Операции могут быть бинарными или унарными. Бинарные операции выполняются над двумя объектами, унарные — над одним.
Операция присваивания
Операция присваивания обозначается символом = и выполняется в 2 этапа:
Пример:
Код:
int a = 4; // переменной a присваивается значение 4
int b;
b = a + 2; // переменной b присваивается значение 6,
// вычисленное в правой части
В случае если объекты в левой и правой части операции присваивания имеют разные типы используется операция явного приведения типа.
объект = (тип)выражение;
Код:
float a = 241.5;
// Перед вычислением остатка от деления a приводится к целому типу
int b = (int)a % 2; // b = 1
Операции отношения
Основные операции отношения:
Арифметические операции
Основные бинарные операции, расположенные в порядке уменьшения приоритета:
операция расположена до объекта, то сначала происходит изменение значения переменной на 1, а потом это значение используется для выполнения следующих операций. Если операция ++ или -- расположена после переменной, то сначала выполняется операция, а потом значение переменной изменяется на 1.
Пример:
int a=2;
int b=3;
int c, d;
c = a*++b; // c=8, поскольку в операции умножения уже b=4
d = a*b++; // d=6, поскольку в операции умножения b=3
Бинарные арифметические операции могут быть объединены с операцией присваивания:
Логические операции
Логические операции делятся на две группы:
Основные условные логические операции:
Основные побитовые логические операции в языке Си:
Пример:
Код:
unsigned char a = 14; // a = 0000 1110
unsigned char b = 9; // b = 0000 1001
unsigned char c, d, e, f;
c = a & b; // c = 8 = 0000 1000
d = a | b; // d = 15 = 0000 1111
e = ~a; // e = 241 = 1111 0001
f = a ^ b; // f = 7 = 0000 0111
Побитовые операции позволяют осуществлять установку и сброс отдельных битов числа. С этой целью используется маскирование битов. Маски, соответствующие установке каждого бита в байте, представлены в таблице
Для установки определенного бита необходимо соответствующий бит маски установить в 1 и произвести операцию побитового логического ИЛИ с константой, представляющей собой маску:
Код:
unsigned char a = 3;
a = a | 0x04; // a = 7, бит 2 установлен
Для сброса определенного бита необходимо соответствующий бит маски сбросить в 0 и произвести операцию побитового логического И с константой, представляющей собой инверсную маску:
Код:
unsigned char a = 3;
a = a & (~0x02); // a = 1, бит 1 сброшен
Бинарные побитовые логические операции могут быть объединены с операцией присваивания:
Сдвиговые операции
Операции арифметического сдвига применяются в целочисленной арифметике и обозначаются как:
объект = выражение сдвиг КоличествоРазрядов;
Пример:
Код:
unsigned char a=6; // a = 0000 0110
unsigned char b;
b = a >> 1; // b = 0000 0110 >> 1 = 0000 0011 = 3
Арифметический сдвиг целого числа вправо >> на 1 разряд соответствует делению числа на 2.
Арифметический сдвиг целого числа влево << на 1 разряд соответствует умножению числа на 2.
- операции присваивания;
- операции отношения;
- арифметические;
- логические;
- cдвиговые операции.
Операции могут быть бинарными или унарными. Бинарные операции выполняются над двумя объектами, унарные — над одним.
Операция присваивания
Операция присваивания обозначается символом = и выполняется в 2 этапа:
- вычисляется выражение в правой части;
- результат присваивается операнду, стоящему в левой части:
Пример:
Код:
int a = 4; // переменной a присваивается значение 4
int b;
b = a + 2; // переменной b присваивается значение 6,
// вычисленное в правой части
В случае если объекты в левой и правой части операции присваивания имеют разные типы используется операция явного приведения типа.
объект = (тип)выражение;
Код:
float a = 241.5;
// Перед вычислением остатка от деления a приводится к целому типу
int b = (int)a % 2; // b = 1
Операции отношения
Основные операции отношения:
- == эквивалентно — проверка на равенство;
- != не равно — проверка на неравенство;
- < меньше;
- > больше;
- <=меньше или равно;
- >= больше или равно.
Арифметические операции
Основные бинарные операции, расположенные в порядке уменьшения приоритета:
- умножение *;
- деление /;
- сложение +;
- вычитание -;
- остаток от целочисленного деления %.
- инкрементирование (увеличение на 1) ++;
- декрементирование (уменьшение на 1) --;
- изменение знака -.
операция расположена до объекта, то сначала происходит изменение значения переменной на 1, а потом это значение используется для выполнения следующих операций. Если операция ++ или -- расположена после переменной, то сначала выполняется операция, а потом значение переменной изменяется на 1.
Пример:
int a=2;
int b=3;
int c, d;
c = a*++b; // c=8, поскольку в операции умножения уже b=4
d = a*b++; // d=6, поскольку в операции умножения b=3
Бинарные арифметические операции могут быть объединены с операцией присваивания:
- объект *= выражение; // объект = объект * выражение
- объект /= выражение; // объект = объект / выражение
- объект += выражение; // объект = объект + выражение
- объект -= выражение; // объект = объект - выражение
- объект %= выражение; // объект = объект % выражение
Логические операции
Логические операции делятся на две группы:
- условные;
- побитовые.
- 1 если выражение истинно;
- 0 если выражение ложно.
Основные условные логические операции:
- && - И (бинарная) — требуется одновременное выполнение всех операций отношения;
- || - ИЛИ (бинарная) — требуется выполнение хотя бы одной операции отношения;
- ! - НЕ (унарная) — требуется невыполнение операции отношения.
Основные побитовые логические операции в языке Си:
- & конъюнкция (логическое И) - бинарная операция, результат которой равен 1 только когда оба операнда единичны (в общем случае - когда все операнды единичны);
- | дизъюнкция (логическое ИЛИ) - бинарная операция, результат которой равен 1 когда хотя бы один из операндов равен 1;
- ~ инверсия (логическое НЕ) - унарная операция, результат которой равен 0 если операнд единичный, и равен 1, если операнд нулевой;
- ^ исключающее ИЛИ - бинарная операция, результат которой равен 1, если только один из двух операндов равен 1 (в общем случае если во входном наборе операндов нечетное число единиц).
Пример:
Код:
unsigned char a = 14; // a = 0000 1110
unsigned char b = 9; // b = 0000 1001
unsigned char c, d, e, f;
c = a & b; // c = 8 = 0000 1000
d = a | b; // d = 15 = 0000 1111
e = ~a; // e = 241 = 1111 0001
f = a ^ b; // f = 7 = 0000 0111
Побитовые операции позволяют осуществлять установку и сброс отдельных битов числа. С этой целью используется маскирование битов. Маски, соответствующие установке каждого бита в байте, представлены в таблице
Для установки определенного бита необходимо соответствующий бит маски установить в 1 и произвести операцию побитового логического ИЛИ с константой, представляющей собой маску:
Код:
unsigned char a = 3;
a = a | 0x04; // a = 7, бит 2 установлен
Для сброса определенного бита необходимо соответствующий бит маски сбросить в 0 и произвести операцию побитового логического И с константой, представляющей собой инверсную маску:
Код:
unsigned char a = 3;
a = a & (~0x02); // a = 1, бит 1 сброшен
Бинарные побитовые логические операции могут быть объединены с операцией присваивания:
- объект &= выражение; // объект = объект & выражение
- объект |= выражение; // объект = объект | выражение
- объект ^= выражение; // объект = объект ^ выражение
Сдвиговые операции
Операции арифметического сдвига применяются в целочисленной арифметике и обозначаются как:
- >> - сдвиг вправо;
- << - сдвиг влево.
объект = выражение сдвиг КоличествоРазрядов;
Пример:
Код:
unsigned char a=6; // a = 0000 0110
unsigned char b;
b = a >> 1; // b = 0000 0110 >> 1 = 0000 0011 = 3
Арифметический сдвиг целого числа вправо >> на 1 разряд соответствует делению числа на 2.
Арифметический сдвиг целого числа влево << на 1 разряд соответствует умножению числа на 2.