Что такое приоритет операторов C и ассоциативность

Cto Takoe Prioritet Operatorov C I Associativnost



Операторы обычно используются для выполнения различных арифметических и логических операций в C. Язык программирования C следует определенному порядку, известному как приоритет оператора и ассоциативность определить порядок операций при выполнении. Правила приоритет оператора и ассоциативность помощь в написании безошибочного кода и повышение читабельности кода.

В этой статье представлен исчерпывающий учебник, который поможет вам узнать об ассоциативности и приоритете операторов в языке C.

Приоритет оператора в C

Приоритет оператора описывает последовательность, в которой вычисляются несколько операторов при вычислении выражений. Например, если в выражении есть операторы сложения и умножения, какой из них следует вычислять первым? Ответ прост, C следует определенным правилам для разрешения такой неоднозначности, широко известным как приоритет оператора . В С, приоритет оператора классифицируется на 17 уровней, от унарных операторов до тернарных условных операторов. Большинство используемых операторов, таких как арифметические операторы, операторы отношения, логические операторы и побитовые операторы, соответствуют стандарту C. приоритет оператора протокол.







Приоритет правила определяют, какие операторы имеют более высокий приоритет, чем другие, при оценке выражений. Несколько типов операторов в языке программирования C имеют разную степень приоритет . Например, унарные операторы имеют более высокий приоритет, чем бинарные. Ниже приведен список операторов, отсортированных в порядке возрастания приоритет :



Оператор Значение оператора Ассоциативность
()
[]
->
.
Функциональный вызов

Ссылка на элемент массива



Косвенный выбор члена





Прямой выбор участников

Слева направо
!
~
+

++

&
*
размер
(тип)
Логическое отрицание

Побитовое (1) дополнение

Унарный плюс

Унарный минус

Увеличение

Уменьшение

Разыменование (адрес)

Ссылка на указатель

Возвращает размер объекта

Приведение типов (преобразование)

Справа налево
*
/
%
Умножить

Разделять

Остаток

Слева направо
+
Двоичный плюс (дополнение)

Двоичный минус (вычитание)

Слева направо
<<
>>
Левый 'шифт

Правый сдвиг

Слева направо
<
<=
>
>=
Меньше, чем

Меньше или равно

Больше чем

Больше или равно

Слева направо
==
'='
Равно

Не равно

Слева направо
& Побитовое И Слева направо
^ Побитовое исключающее ИЛИ Слева направо
| Побитовое ИЛИ Слева направо
&& Логическое И Слева направо
|| Логическое ИЛИ Слева направо
?: Условный оператор Справа налево
'='
'='
'='
'='
+=
'='
'='
^=
|=
<<=
>>=
Простое задание

Назначить продукт

Назначить частное

Назначить остаток

Назначить сумму

Назначить разницу

Присвоить побитовое И

Назначить побитовое XOR

Присвоить побитовое ИЛИ

Назначить левую смену

Назначить правую смену

Справа налево
, Разделитель выражений Слева направо

Эти правила указывают компилятору, как оценивать выражения с несколькими операторами в одном выражении. Оператор умножения, например, имеет больший приоритет, чем оператор сложения в уравнении A + B * C, в соответствии с правилом приоритет правила. Поэтому компилятор сначала оценит выражение B * C перед добавлением A к результату.

Давайте посмотрим на пример приоритет оператора через код.

#include

инт основной ( ) {

инт а '=' 43 , б '=' одиннадцать , с '=' 16 , д '=' 31 ;

инт результат '=' ++ а * б -- + с / -- д ;

printf ( 'а = %d \n ' , а ) ;

printf ( 'б = %д \n ' , б ) ;

printf ( 'с = %d \n ' , с ) ;

printf ( 'д = %д \n ' , д ) ;

printf ( 'результат = %d \n ' , результат ) ;

возвращаться 0 ;

}

Четыре переменные a, b, c и d объявлены в приведенном выше коде, и их начальные значения равны 43, 11, 16 и 31 соответственно. Затем к этим переменным в выражении применяются различные арифметические операторы и операторы присваивания. Выражение увеличивает значение a с помощью оператора преинкремента ++a, умножает результат на оператор постдекремента b–, а затем прибавляет результат к делению c на предварительно уменьшенное значение d. (используя оператор предварительного декремента –d). Затем переменная result используется для хранения общего результата этого выражения.

Выход

Ассоциативность в C

Ассоциативность относится к порядку, в котором операторы оцениваются во время выражения с тем же приоритетом. Слева направо и справа налево ассоциативность две формы ассоциативности в C. Если два оператора имеют одинаковые приоритет , они оцениваются слева направо в соответствии с концепцией слева направо ассоциативность . Тем не менее, если соблюдается тот же приоритет, операторы оцениваются справа налево в соответствии с справа налево. ассоциативность .

Например, оператор приращения ++ имеет направление справа налево. ассоциативность , что означает приращение оператор оценивается после переменной. В то время как логическое И оператор имеет направление слева направо ассоциативность , что означает, что оператор оценивается слева направо.

#include

интервал основной () {

инт а = 6 , б = 3 , с = 2 ;

int результат = а * б / с;

printf( 'результат = %d \n ' , результат);

возвращаться 0 ;

}

В этом коде объявлены три переменные a, b и c, и они инициализированы значениями 6, 3 и 2 соответственно. Затем к этим переменным в выражении применяются операции умножения и деления. Умножение и деление ранжируются слева направо в C на основе их ассоциативность так как они имеют одинаковый уровень приоритета. Это указывает на то, что сначала идет операция деления, а затем операция умножения при вычислении выражения, a * b / c.

Выход

Заключение

Приоритет оператора и ассоциативность являются ключевыми понятиями в программировании на C, которые помогают определить порядок выполнения выражений. Операторы с самым высоким приоритет уровень оценивается в первую очередь и ассоциативность Правила помогают определить порядок при использовании нескольких операторов с одинаковым приоритетом. Понимание приоритет оператора и ассоциативность имеет важное значение при разработке сложных программ и помогает создавать более чистый и эффективный код с меньшим количеством ошибок.