В процессе определения переменной, которое назначает область памяти и число байтов для ее хранения, можно также установить начальное численное значение этой переменной, т.е. инициализировать переменную. Например, определение целочисленной константы «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;
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT