Вы вошли на сайт, как Гость
Регистрация

Операторы языка Си

Основы языка Си
(Операторы языка Си)

Язык Си обладает некоторым набором операторов, которые представлены в табл. Полное множество операторов разбито на пять групп: общие, арифметические, логические, битовые манипуляции, унарные. Операторы общей группы предназначаются для записи выражений на языке Си. Арифметические операторы предназначены для выполнения математических действий над переменными, таких как сложение, вычитание, умножение и деление. Логические операторы используются в выражениях для определения истинности некоторого условия. Битовые операции предназначены для модификации одного или нескольких битов переменной. Унарные операции используются для выполне ния действий только над одной переменной. В первой колонке табл. указан приоритет оператора в том случае, если выражение содержит сразу несколько операторов. Приведем примеры последовательности применения операторов.

Операторы общей группы. Круглые скобки из группы общих операторов используются для определения порядка выполнения действий над операндами. Допустим, в строке программы записано следующее выражение: 2 * 23 + 15 Оператор умножения имеет приоритет над оператором сложения, поэтому результат вычисления выражения будет равен 61. Какие изменения мы должны внести в выражение, если хотим сначала сложить 23 и 15, и лишь затем умножить сумму на 2. Для изменения порядка действий над операндами мы воспользуемся круглыми скобками: 2 * (23 + 15) И результат вычислений станет равным 76. Фигурные скобки следует использовать для объединения некоторого множества операторов в законченный смысловой блок, например в функцию или цикл «loop».

Операторы группы арифметических операций. Рассмотрим последовательность выполнения действий над операндами при исполнении микроконтроллером следующего выражения: Sum = 2 + 3; Для вычисления значения переменной sum сначала реализуется оператор сложения «+», а затем оператор присваивания «=». В колонке 1 табл. отражено, что оператор сложения имеет приоритет над оператором присваивания. При этом необходимо, чтобы переменная sum ранее была определена как int. Что произойдет в случае, если переменная sum ранее была объявлена как переменная другого типа, например float. После сложения результат будет преобразован к тому формату представления числа, который был объявлен при определении переменной sum. Рассматриваемый пример может быть реализован с использованием другого синтаксиса:

num1 = 2;
num2 = 3;
sum = num1 + num2;

Подразумевается, что все упомянутые переменные num1, num2 и sum ранее были определены. Операторы инкремента и декремента производят действия только над одной переменной. При этом, три приведенных ниже записи, отличаются синтаксисом выражения, но производят одинаковые действия:

number = number + 1;
number++;
++number;

Аналогично, три следующих записи реализуют операцию декремента, т.е. уменьшения на единицу переменной number:

number = number - 1;
number--;
--number;

Операция получения целочисленного остатка от деления 2%3 возвращает 2, так как целочисленное деление 2 на 3 не может быть произведено. Результат операции 14%3 также равен 2, поскольку результат целочисленного деления 14 на 3 равен 4 с остатком 2.

Операторы логической группы. Операторы этой группы используются для определения условий, по которым реализуется ветвление алгоритма. Операторы логической группы возвращают в виде результата 1, если результат операции «правда», и 0, если результат операции «ложь». Допустим, мы хотим сравнить текущее значение некоторой переменной с пороговым значением 82. Для этого могут быть использованы операторы больше «>», меньше «<», больше или равно «> =», меньше или равно «< =», не равно «! =» или равно «= =». Рассмотрим следующую запись на Си:

value = temperature > 82;

После исполнения приведенной строки программы переменной value будет присвоено значение 1 или 0. Уместно вспомнить, что логические операции имеют приоритет над операцией присваивания. Поскольку результатом «вычисления» выражения справа может быть только 0 или 1, то и переменная value должна быть ранее объявлена соответствующим образом.

Операторы группы битовых манипуляций. Как было отмечено ранее, одним из преимуществ языка Си для программирования микроконтроллерных систем по сравнению с другими языками высокого уровня, является возможность непосредственного изменения данных в ячейках памяти, например с использованием оператором побитового логического И, ИЛИ и Исключающего ИЛИ. Самый простой пример применения операций сдвига - это умножение и деление числа на число 2n . Рассмотрим результат выполнения следующих трех операторов:

number = 24;
new_number_one = number << 1;
new_number_two = number >> 1;

Допустим, что три используемые в примере переменные определены как int. В первой строке переменной number присваивается значение 24 в десятичной системе счисления. Это же значение в двоичной системе счисления будет равно 00000000 00011000. Результатом действия оператора «<<» будет сдвиг влево на один разряд значения переменной number , т.е. 00000000 00110000 или 48 в десятичной системе счисления. Это значение и будем присвоено переменной new_number_one. В третьей строке оператор «>>» реализует сдвиг вправо числа number. Получится новое двоичное число 00000000 00001100 или 12 в десятичной системе счисления. В результате, значение переменной new_number_one будет равно удвоенному значению переменной number, в то время как переменная new_number_two будет равна поделенному на 2 значению number.