В процессе определения переменной, которое назначает область памяти и число байтов для ее хранения, можно также установить начальное численное значение этой переменной, т.е. инициализировать переменную. Например, определение целочисленной константы «change» со значением 23 может быть проведено посредством записи:
const int change = 23
После того, как мы научились задавать необходимые для использования в прикладной программе переменные, следует научиться выполнять арифметические и логические операции над этими переменными. Этим мы займемся в следующем параграфе.
3.3. Операторы языка Си
Язык Си обладает некоторым набором операторов, которые представлены в табл. 3.2. Полное множество операторов разбито на пять групп: общие, арифметические, логические, битовые манипуляции, унарные.
Операторы общей группы предназначаются для записи выражений на языке Си. Арифметические операторы предназначены для выполнения математических действий над переменными, таких как сложение, вычитание, умножение и деление. Логические операторы используются в выражениях для определения истинности некоторого условия. Битовые операции предназначены для модификации одного или нескольких битов переменной. Унарные операции используются для выполнения действий только над одной переменной.
В первой колонке табл. 3.2. указан приоритет оператора в том случае, если выражение содержит сразу несколько операторов. Приведем примеры последовательности применения операторов.
Приоритет в выражениях | Имя оператора | Символ для обозначения |
---|---|---|
Общие | ||
1 | Скобки | , {} |
1 | Разделители | -> , . |
11 | Условие | ?: |
12 | Присваивание | =, +=, *= и т.д. |
Арифметические | ||
3 | Умножение | * |
3 | Деление | / |
3 | Получение целочисленного остатка от деления | % |
4 | Сложение | + |
4 | Вычитание | - |
Логические | ||
6 | Меньше | < |
6 | Меньше или равно | <= |
6 | Больше | > |
6 | Больше или равно | >= |
7 | Равно | == |
7 | Не равно | != |
9 | Логическое И | && |
10 | Логическое ИЛИ | || |
Битовые манипуляции | ||
5 | Сдвиг влево | << |
5 | Сдвиг вправо | >> |
8 | Поразрядное И | & |
8 | Поразрядное исключающее ИЛИ | ^ |
8 | Поразрядное ИЛИ | | |
Унарные | ||
2 | Инверсия | ! |
2 | Взятие обратного кода числа | ~ |
2 | Инкремент | ++ |
2 | Декремент | -- |
2 | Минус | - |
2 | Привести к типу | (type) |
2 | Указатель | * |
2 | Взять адрес | & |
2 | Определить размер | sizeof |
Табл. 3.2. Операторы языка Си
Операторы общей группы. Круглые скобки из группы общих операторов используются для определения порядка выполнения действий над операндами. Допустим, в строке программы записано следующее выражение:
2 * 23 + 15
Оператор умножения имеет приоритет над оператором сложения, поэтому результат вычисления выражения будет равен 61. Какие изменения мы должны внести в выражение, если хотим сначала сложить 23 и 15, и лишь затем умножить сумму на 2? Для изменения порядка действий над операндами мы воспользуемся круглыми скобками:
2 * (23 + 15)
И результат вычислений станет равным 76.
Фигурные скобки следует использовать для объединения некоторого множества операторов в законченный смысловой блок, например в функцию или цикл «loop». Примеры использования фигурных скобок, а также других операторов из группы общих рассматриваются в разделе 3.4.
Операторы группы арифметических операций. Рассмотрим последовательность выполнения действий над операндами при исполнении микроконтроллером следующего выражения:
Sum = 2 + 3;
Для вычисления значения переменной sum сначала реализуется оператор сложения «+», а затем оператор присваивания «=». В колонке 1 табл. 3.2 отражено, что оператор сложения имеет приоритет над оператором присваивания. При этом необходимо, чтобы переменная sum ранее была определена как int. Что произойдет в случае, если переменная sum ранее была объявлена как переменная другого типа, например float? После сложения результат будет преобразован к тому формату представления числа, который был объявлен при определении переменной sum.
Рассматриваемый пример может быть реализован с использованием другого синтаксиса:
num1 = 2;
num2 = 3;
sum = num1 + num2;
Подразумевается, что все упомянутые переменные num1, num2 и sum ранее были определены.
Операторы инкремента и декремента производят действия только над одной переменной. При этом, три приведенных ниже записи, отличаются синтаксисом выражения, но производят одинаковые действия:
number = number + 1;
number++;
++number;
Аналогично, три следующих записи реализуют операцию декремента, т.е. уменьшения на единицу переменной number.
number = number - 1;